ネットワーク(静的イーサネット)の複数のコンピュータ間でSSH経由で通信したいと思います。これを行うには実行する必要があります。ssh-add
特定のコンピュータにログインするたびに。
一度設定した後、ログインするかコンピュータを再起動するたびにパスワードを要求しないようにするにはどうすればよいですか?
ファイルにいくつかの行を追加する方法があることを知っていますが、bash_profile
特定のシステムを再起動またはログインするたびに、まだパスワードを入力する必要があります。
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
ベストアンサー1
これは、セキュリティと利便性のバランスを示す典型的な例です。幸いなことに、多くのオプションがあります。最適なソリューションは、使用シナリオと必要なセキュリティレベルによって異なります。
パスワード付きSSHキー、なし ssh-agent
認証にキーを使用するたびにパスワードを入力する必要があります。セキュリティの面では、これが最善の選択肢ですが、使いやすさは最悪です。これにより、再入力が必要な負担を軽減するために脆弱なパスワードを選択する可能性があります。
パスワードを含むSSHキー ssh-agent
以下を追加すると、~/.bash_profile
ログイン時にssh-agent
SSHキーが自動的に起動してロードされます。
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
ログインするたびにパスワードを入力する必要があります。使いやすさの点では少し優れていますが、ssh-agent
ログインセッション中にキーを使用するかどうかにかかわらず、パスワードを求めるメッセージが表示されるという欠点があります。それぞれの新しいログインは、ssh-agent
明示的に終了しない限り、ログアウト後に追加されたキーを使用してメモリ内で実行され続ける別のインスタンスを作成します。
ログアウト時に終了するには、ssh_agent
以下を追加します。~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
または次~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
ファイルシステムのssh-agent
固定位置を介して(例:コリン・アンダーソンの回答。これは、複数のプロキシインスタンスを作成するよりも改善された機能です。ただし、明示的に終了しない限り、ログアウト後も復号化されたキーはメモリに残ります。
デスクトップでは、SSHエージェントがデスクトップ環境に含まれています。GNOMEキーリングSSHエージェント通常、ログインセッション中にSSHキーを初めて使用するときにパスワードを求めるメッセージが表示され、セッションが終了するまで復号化された秘密鍵をメモリに保存できるため、より良いアプローチになります。
パスワードを含むSSHキー ssh-ident
ssh-ident
ssh-agent
必要に応じてユーザーに代わってIDを管理およびロードするユーティリティです。アクセスが必要な端末、SSH、またはログインセッションの数に関係なく、必要な場合にのみキーを追加しますssh-agent
。また、接続されているホストまたはssh
呼び出すディレクトリに応じて、さまざまなプロキシとさまざまなキーセットを追加して使用できます。これにより、他のホストへのプロキシ転送を使用するときにキーを分離できます。また、GitHub などのサイトで複数のアカウントを使用できます。
を有効にするには、ssh-ident
それをインストールして次のエイリアスをに追加します~/.bash_profile
。
alias ssh='/path/to/ssh-ident'
パスワードを含むSSHキー keychain
keychain
ssh-agent
あなたに代わってそれを管理し、ssh-agent
ログインセッションの終わりにも実行を続ける小さなユーティリティです。その後、ログイン時にkeychain
既存のインスタンスに接続しますssh-agent
。実際には、再起動後に初めてログインするときにのみパスワードを入力するだけです。その後のログインでは、ssh-agent
既存のインスタンスの暗号化されていないキーが使用されます。これはcron
、パスワードのないSSHキーを持たない操作でパスワードのないRSA / DSA認証を許可するのにも役立ちます。
を有効にするには、インストールしてkeychain
次のように追加します~/.bash_profile
。
eval `keychain --agents ssh --eval id_rsa`
セキュリティの観点からはssh-ident
、keychain
特定のセッション寿命に限定されたインスタンスよりも悪いですが、ssh-agent
高いレベルの利便性を提供します。セキュリティを強化するために、keychain
一部の人々はキーチェーン呼び出し--clear
にオプションを追加します~/.bash_profile
。これにより、上記のようにログインcron
時にパスワードを再入力する必要がありますが、ユーザーがログアウトしても暗号化されていないキーにアクセスできます。これkeychain
ウィキページより多くの情報と例があります。
パスワードのないSSHキー
セキュリティの観点から見ると、これは秘密鍵が公開されると完全に保護されないため、最悪のオプションです。ただし、これは再起動後にパスワードを再入力する必要がないようにする唯一の方法です。
パスワードを含むSSHキー ssh-agent
、パスワードを次に渡してください。 ssh-add
スクリプトから
ssh-add
たとえば、スクリプトからパスワードを渡すのは単純なアイデアのように見えるかもしれませんが、echo "passphrase\n" | ssh-add
見るほど単純ではありません。ssh-add
パスワードを読まないでstdin
直接/dev/tty
開いて読んでください。。
これができる解決済みそしてexpect
、対話型アプリケーションを自動化するツールです。以下は、スクリプトに保存されたパスワードを使用してSSHキーを追加するサンプルスクリプトです。
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
パスワードはスクリプトにプレーンテキストとして保存されるため、パスワードのないSSHキーを使用するよりもセキュリティの面では優れていません。この方法を使用するには、expect
パスワードを含むスクリプトにキー所有者のみを読み、書き込み、および実行するための適切な権限が設定されていることを確認してください。