web-dev-qa-db-ja.com

SSHキーのパスフレーズを誤って公開しました。どうすればよいですか?

入力フィールドを間違えたので、SSHキーのパスフレーズが世界中に表示されており、削除することもできません。

私が理解している限りでは、これは当面のセキュリティ上の問題ではありません。パスフレーズは、私の秘密鍵自体が公開されるケースからのみ保護するためです。それが起こっていないので(キーは私が所有するハードウェアにのみ存在します)、将来起こる場合に備えてパスフレーズを変更する必要があります。使用したすべての場所で別のSSHキーに変更する必要はありませんそれ。

あれは正しいですか?これはすべてプライベートプロジェクトのためのものであり、仮想的な違反はせいぜい迷惑で恥ずかしいことです。

38

技術的に、(パスワードで保護された)秘密鍵も漏洩したと思わない場合は、パスフレーズを変更するだけで十分です。

現実的に、SSH鍵を新しいものと交換したいだけかもしれません。それらはとても安いので無料であるかもしれません、そしてそれはあなたが誰かが持っているか、持っているか、または侵害されたパスフレーズで秘密鍵のコピーを手に入れることができるかどうか心配することからあなたを取り除きます。パスフレーズを漏らした(そして変更した)数か月前にバックアップしたキーのコピーを誰かが取得した場合でも、パスフレーズはそのキーへのアクセスをユーザーに許可します。これは、新しいパスフレーズで今日使用しているのと同じです。

だからあなたのキーを変更してください。それは良い習慣とベストプラクティスです。

編集:

@ David-Zは、キーの交換にかかる時間は考慮すべきコストであることを示唆しています。キーについて話しているので、プロセスを自動化できるので、それも無視できます。次のスクリプトでは、作成とテストに約15分かかりました。

#!/bin/bash

for i in $*
do
    cat newkey.pub | ssh -i oldkey username@$i "cat >> ~/.ssh/authorized_keys"
    ssh -i newkey username@$i "sed -n '/my_old_key/!p' < ~/.ssh/authorized_keys > ~/.ssh/authorized_keys_tmp && mv ~/.ssh/authorized_keys_tmp ~/.ssh/authorized_keys"
    if [ $? -eq 0 ]; then
       echo "Successful key replacement for $i"
    else
       echo "Key replacement failed for $i"
    fi
done

このスクリプトは:

  1. 古いキーを使用して、リモートのauthorized_keysに新しいキーを追加します
  2. 新しいキーを使用して、リモートのauthorized_keysから古いキーを削除します

美しさは、新しいキーの押し出しに問題があった場合、新しいキーを使用するため、古いキーの削除が失敗するため、足で自分を撃つ可能性が低くなります。

これらのsshの使用を求められないように、ssh-agentを使用してパスフレーズをキャッシュする必要があります。次に、コマンドラインで更新するサーバーで実行します。

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-GWE6uxZxn9IS/agent.2016; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2017; export SSH_AGENT_PID;
echo Agent pid 2017;
$ ssh-add oldkey
Enter passphrase for oldkey: 
Identity added: oldkey (oldkey)
$ ssh-add newkey
Enter passphrase for newkey: 
Identity added: newkey (newkey)
$ ./chssh.sh server1 server2 server3
Successful key replacement for server1
Successful key replacement for server2
Successful key replacement for server3
$ 
48
gowenfawr

既存のキーのパスフレーズを変更するには、次のようにします。

ssh-keygen -p

...しかし、あなたは今では終わっていません。また、古いキーのコピーを考慮する必要があります。これらは削除する必要があります。そうしないと、侵害されたものとして扱う必要があります。バックアップについて考えますが、ファイルシステム上のデータも考えます(ZFSやbtrfsなどのコピーオンライトファイルシステムは、ストレージバックエンドのどこかにコピーを保持することができます)。

キーファイルファイルが漏洩する可能性があると思われる場合、パスフレーズを変更することは短期的な解決策です。古い秘密鍵のすべてのコピーがなくなったことを確認できない場合は、秘密鍵ファイルの変更を検討する必要があります。

公開鍵が添付されているすべてのサービスも忘れないでください。キーの漏洩は1つの問題であり、他のシステムへの侵入は悪い副作用となります。

20
Lekensteyn