web-dev-qa-db-ja.com

空のパスフレーズでSSHキーを使用しても大丈夫ですか?

私が最初にsshキーの作成方法を学んだとき、私がすべて読んだチュートリアルでは、適切なパスフレーズを選択する必要があると述べていました。しかし、最近、別のマシンにsshする必要のあるデーモンプロセスをセットアップするときに、起動のたびに認証する必要のないキーを使用する唯一の方法(それが思われる)は空のキーを作成することであることがわかりましたパスフレーズ。だから私の質問は、パスフレーズなしでキーを使用することの懸念は何ですか?

35
mozillalives

パスフレーズのないキーは、他の誰もそのキーに到達できない(とにかくアクセスを許可するリソースにアクセスできない)ことに依存しています。したがって、キーがその横にあるマシンへのアクセスを許可し、両方のマシンが同じレベルの電子的および物理的セキュリティを備えている場合、それはそれほど大きな問題ではありません。

一方、キーがセキュリティの低いマシン上にある場合(おそらく、信頼できないユーザーが多い、物理的に簡単にアクセスできる、またはパッチ適用体制で最新に維持されていない)場合は、おそらくそこにパスフレーズなしのキーを保持したい。

結局のところ、それはあなたのセットアップへの信頼とそれを行うことのリスク/コストの比較検討にかかっています—攻撃者がキーへのアクセスを獲得することは、キーがあなたにアクセスするリソースよりも現実的に簡単ではないことをかなり確信で​​きる場合、あなたは大丈夫です。その自信がない場合は、おそらく理由を修正する必要があります:)

41
Mo.

別の解決策として、セキュリティを強化しながら簡単にできるので、常にパスワードを入力する必要がありません。

秘密鍵を暗号化する場合は、ワークステーションでssh-agentを使用して、暗号化されていない鍵を「キャッシュ」できます。復号化した鍵を保存する場合は、ssh-add ~/.ssh/id_rsaまたは秘密鍵の名前が付けられているものを実行します。パスワードの入力を求められます。復号化された鍵は、ログアウトするか、ssh-agentを終了するかシャットダウンするまで、ssh接続で使用できます。

ssh-agent -kを使用して、保存されたキーをkillすることができ、ssh-agent -t [seconds]を使用して、キーがメモリに存在する存続期間を割り当てることができます。キーをいつまでも解読したくないが、ホストの周りで多くのSSHを実行したい場合は、タイムアウトを5〜10分に設定できます。したがって、キーのパスワードを継続的に入力する必要はありません。

繰り返しますが、これはすべて、/ workstation /のセキュリティにどれだけ自信があるかに関係しています。これは、あなたがそれにアクセスできる唯一のユーザーであり、かなり安全なローカルパスワードを持っていて、エクスプロイトやルートキットを自分に招く場合、パスフレーズのない秘密鍵はかなり安全です。

あなたが私のようで、秘密鍵をサムドライブに保存している場合、それは単なる秘密鍵(ワークステーションで使用するものとは別のものです)であっても、確実に暗号化する必要があります。キーを紛失しました。サーバーの~/.ssh/authorized_keyslistからサムドライブの公開キーを簡単に削除できます。これにより、/ 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セッション。

12
cpbills

同様の質問 をご覧ください。WebサーバーのSSL秘密キーについて質問しました。基本的に、3つのオプションがあります。

  1. ファイルシステムの権限でキーを保護します。
  2. パスワードで保護されたキーを使用し、再起動するたびにキーを手動で入力してください。
  3. パスワードで保護されたキーを使用し、キーをファイルシステムに保存して再起動を自動化します。

それらのそれぞれに欠陥があるので、それはすべてあなたが最も恐れるものに依存します。

3
chmeee

パスフレーズなしのキーが必要な自動アクセスの場合は、authorized_keys(sshd(8)を参照)の追加オプションを常に使用して、実行できるコマンドを制限します。

通常、私はリモートエンドで慎重に記述されたスクリプトを提供します。これは、許可したいジョブ(またはジョブ-パラメーターを調べることができます)を正確に実行します。

次に、そのキーを使用して接続できるIPアドレスにロックします(100%確実ではありませんが、コマンド制限でも問題ありません)。

1
jrg

あなた以外の誰もがキーにアクセスできない限り、パスフレーズは必要ありません。実際、自動化ソフトウェアで使用されるキーにパスフレーズを使用することはできません。

1
Fahad Sadah

Sshを使用してあらゆる種類の自動化された手順を実行したい場合-私は特にNagiosチェックについて考えています-パスフレーズを使用したくないでしょう。

この状況では、おそらくこれをLANの外部で使用することはなく、手順を実行するサーバーにキーを安全に保存することになります。

SSHについて説明するほとんどのチュートリアルは、外部ネットワークから、おそらく安全でないコンピューターからログインする人を想定しています。その場合、アドバイスは適切です。

基本的には、そうすべきでない正当な理由がない限り、パスフレーズを作成します。毎回パスワードを入力するのが面倒なので、あなたにとって十分な理由かもしれません:-)

0
dunxd