これは、セキュリティと利便性のトレードオフの典型的な例です。幸いなことに、多くのオプションがあります。最も適切なソリューションは、使用シナリオと必要なセキュリティレベルによって異なります。
パスフレーズ付きsshキー、いいえ ssh-agent
これで、キーが認証に使用されるたびにパスフレーズを入力する必要があります。これはセキュリティの観点からは最適なオプションですが、最悪の使いやすさを提供します。これは、パスフレーズを繰り返し入力する負担を軽減するために、弱いパスフレーズが順番に選択されることにもつながります。
パスフレーズ付きssh-key、 ssh-agent
以下を追加すると、ログイン時にssh-key ~/.bash_profile
が自動的に起動ssh-agent
およびロードされます。
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
Collin Andersonのanswerのssh-agent
ように、ファイルシステム内の固定位置にエージェントへの永続的な通信ソケットを作成することにより、複数のインスタンスの作成を回避できます。これは、複数のエージェントインスタンスの生成よりも改善されていますが、ログアウト後も復号化されたキーを明示的に強制終了しない限り、メモリに残ります。
デスクトップでは、Gnome Keyring SSH Agentなどのデスクトップ環境に含まれるssh-agent は、ログインセッション中にssh-keyを初めて使用するときにパスフレーズのプロンプトを表示するように作成できるため、より優れたアプローチです。セッションが終了するまで、復号化された秘密鍵をメモリに保存します。
パスフレーズ付きssh-key、 ssh-ident
ssh-ident
ssh-agent
あなたに代わって管理し、必要に応じてIDをロードできるユーティリティです。にアクセスする必要がある端末、ssh、またはログインセッションの数に関係なく、必要に応じて1回だけキーを追加しますssh-agent
。また、接続しているホストまたはディレクトリsshの呼び出し元に応じて、異なるエージェントと異なるキーセットを追加して使用できます。これにより、異なるホストでエージェント転送を使用するときにキーを分離できます。また、GitHubなどのサイトで複数のアカウントを使用できます。
有効にするにはssh-ident
、インストールして、次のエイリアスをに追加します~/bash_profile
:
alias ssh='/path/to/ssh-ident'
パスフレーズ付きssh-key、 keychain
keychain
は、ssh-agent
ユーザーに代わって管理しssh-agent
、ログインセッションが終了しても実行し続けることができる小さなユーティリティです。後続のログインでkeychain
、既存のssh-agent
インスタンスに接続します。実際には、これは、再起動後の最初のログイン時にのみパスフレーズを入力する必要があることを意味します。その後のログインでは、既存のssh-agent
インスタンスの暗号化されていないキーが使用されます。これは、パスワードcron
なしのssh-keyがないジョブでパスワードなしのRSA / DSA認証を許可する場合にも役立ちます。
有効にするにはkeychain
、インストールして、次のようなものを追加します~/.bash_profile
。
eval `keychain --agents ssh --eval id_rsa`
セキュリティの観点から、ssh-ident
そしてkeychain
より悪いssh-agent
特定のセッションの存続期間に制限の場合、彼らは高い利便性を提供します。のセキュリティを向上させるためにkeychain
、一部の人々--clear
は~/.bash_profile
キーチェーン呼び出しにオプションを追加します。これにより、上記のようにログイン時にパスフレーズを再入力する必要がありますがcron
、ユーザーがログアウトした後もジョブは暗号化されていないキーにアクセスできます。keychain
wikiページには、より多くの情報と例があります。
パスフレーズなしのssh-key
セキュリティの観点から、これは最悪のオプションです。秘密鍵は公開された場合に完全に保護されないためです。ただし、これは、再起動後にパスフレーズを再入力する必要がないことを確認する唯一の方法です。
ssh-key with passphrase、with ssh-agent
、パスフレーズを ssh-add
スクリプトから渡す
ssh-add
スクリプトからパスフレーズを渡すのは簡単なアイデアのように思えるかもしれませんが、例えばecho "passphrase\n" | ssh-add
、これはssh-add
パスフレーズを読み取らないstdin
/dev/tty
ように見えるほど単純ではなく、読み取りのために直接開きます。
これが可能なの周りに働いたとのexpect
インタラクティブなアプリケーションを自動化するためのツール。以下は、スクリプトに保存されたパスフレーズを使用してssh-keyを追加するスクリプトの例です。
#!/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-keyを使用するよりもはるかに優れていることに注意してください。このアプローチを使用する場合はexpect
、パスフレーズを含むスクリプトに適切なアクセス許可を設定し、キーの所有者のみが読み取り、書き込み、実行できるようにすることが重要です。