私が最初にsshキーの作成方法を学んだとき、私がすべて読んだチュートリアルでは、適切なパスフレーズを選択する必要があると述べていました。しかし、最近、別のマシンにsshする必要のあるデーモンプロセスをセットアップするときに、起動のたびに認証する必要のないキーを使用する唯一の方法(それが思われる)は空のキーを作成することであることがわかりましたパスフレーズ。だから私の質問は、パスフレーズなしでキーを使用することの懸念は何ですか?
パスフレーズのないキーは、他の誰もそのキーに到達できない(とにかくアクセスを許可するリソースにアクセスできない)ことに依存しています。したがって、キーがその横にあるマシンへのアクセスを許可し、両方のマシンが同じレベルの電子的および物理的セキュリティを備えている場合、それはそれほど大きな問題ではありません。
一方、キーがセキュリティの低いマシン上にある場合(おそらく、信頼できないユーザーが多い、物理的に簡単にアクセスできる、またはパッチ適用体制で最新に維持されていない)場合は、おそらくそこにパスフレーズなしのキーを保持したい。
結局のところ、それはあなたのセットアップへの信頼とそれを行うことのリスク/コストの比較検討にかかっています—攻撃者がキーへのアクセスを獲得することは、キーがあなたにアクセスするリソースよりも現実的に簡単ではないことをかなり確信できる場合、あなたは大丈夫です。その自信がない場合は、おそらく理由を修正する必要があります:)
別の解決策として、セキュリティを強化しながら簡単にできるので、常にパスワードを入力する必要がありません。
秘密鍵を暗号化する場合は、ワークステーションでssh-agent
を使用して、暗号化されていない鍵を「キャッシュ」できます。復号化した鍵を保存する場合は、ssh-add ~/.ssh/id_rsa
または秘密鍵の名前が付けられているものを実行します。パスワードの入力を求められます。復号化された鍵は、ログアウトするか、ssh-agent
を終了するかシャットダウンするまで、ssh接続で使用できます。
ssh-agent -k
を使用して、保存されたキーをkill
することができ、ssh-agent -t [seconds]
を使用して、キーがメモリに存在する存続期間を割り当てることができます。キーをいつまでも解読したくないが、ホストの周りで多くのSSHを実行したい場合は、タイムアウトを5〜10分に設定できます。したがって、キーのパスワードを継続的に入力する必要はありません。
繰り返しますが、これはすべて、/ workstation /のセキュリティにどれだけ自信があるかに関係しています。これは、あなたがそれにアクセスできる唯一のユーザーであり、かなり安全なローカルパスワードを持っていて、エクスプロイトやルートキットを自分に招く場合、パスフレーズのない秘密鍵はかなり安全です。
あなたが私のようで、秘密鍵をサムドライブに保存している場合、それは単なる秘密鍵(ワークステーションで使用するものとは別のものです)であっても、確実に暗号化する必要があります。キーを紛失しました。サーバーの~/.ssh/authorized_keys
listからサムドライブの公開キーを簡単に削除できます。これにより、/ excellent /理由が表示され、公開キーに便利なコメントが追加されます)
以前の回答に対するあなたの応答で、あなたは信頼できる人だけが鍵でマシンにアクセスできると言った。それがあなたがしていることである場合、私はあなたの秘密鍵があなたが接続しているサーバー上にある必要がないことを明確にしたいだけです。公開鍵のみがサーバー上にある必要があり、それは問題ではありません。それが「公開」鍵である理由です。
ああ、私は言及するのを忘れていました。 Xを開始するときにssh-agent
を起動します。それ以外の場合、ssh-add
で保存した復号化された鍵は、別のxterm
セッションを通じて保持されず、毎回パスワードを再入力する必要がありますxterm
を閉じたとき、ssh-add
ファイルで~/.xinitrc
を起動しました。
if [ -x /usr/bin/ssh-agent ]; then
eval $(/usr/bin/ssh-agent)
fi
ssh-agentは、実行時に設定する必要があるいくつかの環境変数を返し、ssh-agent
から実行するため、~/.xinitrc
への呼び出しはeval
にラップされています。環境変数は全体で一定ですXセッション。
同様の質問 をご覧ください。WebサーバーのSSL秘密キーについて質問しました。基本的に、3つのオプションがあります。
それらのそれぞれに欠陥があるので、それはすべてあなたが最も恐れるものに依存します。
パスフレーズなしのキーが必要な自動アクセスの場合は、authorized_keys(sshd(8)を参照)の追加オプションを常に使用して、実行できるコマンドを制限します。
通常、私はリモートエンドで慎重に記述されたスクリプトを提供します。これは、許可したいジョブ(またはジョブ-パラメーターを調べることができます)を正確に実行します。
次に、そのキーを使用して接続できるIPアドレスにロックします(100%確実ではありませんが、コマンド制限でも問題ありません)。
あなた以外の誰もがキーにアクセスできない限り、パスフレーズは必要ありません。実際、自動化ソフトウェアで使用されるキーにパスフレーズを使用することはできません。
Sshを使用してあらゆる種類の自動化された手順を実行したい場合-私は特にNagiosチェックについて考えています-パスフレーズを使用したくないでしょう。
この状況では、おそらくこれをLANの外部で使用することはなく、手順を実行するサーバーにキーを安全に保存することになります。
SSHについて説明するほとんどのチュートリアルは、外部ネットワークから、おそらく安全でないコンピューターからログインする人を想定しています。その場合、アドバイスは適切です。
基本的には、そうすべきでない正当な理由がない限り、パスフレーズを作成します。毎回パスワードを入力するのが面倒なので、あなたにとって十分な理由かもしれません:-)