キーチェーンを使用してSSHキーのパスワードプロンプトを管理したいのですが、1)実際にキーを使用する場合にのみ要求し、2)後でしばらく保存する必要があります。現在2つのオプションがあります。
$ eval `keychain --eval --agents ssh id_rsa`
- 起動時に常にパスワードを求めるが保存します。$ eval `keychain --eval --noask --agents ssh id_rsa`
- 起動時に何も尋ねませんが、キーを使用するたびにパスワードを要求し続けます。
これらの方法の利点を組み合わせることができる方法はありますか?
答え1
ssh-agent
最新バージョンのOpenSSHを使用すると、次の作業が簡単になります。
ssh-agent
追加されたキーのデフォルトのタイムアウト(60分など)を使用して正常に起動します。eval `ssh-agent -t 60m`
ssh
エージェントに使用される物理キーを追加するように設定します。 ~/.ssh/config`に新しい行を追加します。AddKeysToAgent yes
この機能は最新のOpenSSH 7.2に含まれています。以前のバージョンでは、タイムアウトが発生した場合はエージェントに手動でキーを追加する必要がありましたが、次のように bash 機能を使用して自動的にキーを追加できます。
ssh() { /bin/ssh -o BatchMode=yes $* || \ ssh-add path/to/the-key && /bin/ssh $* }
アイデア:バッチモードでキーを使用して接続を試み(キーがない場合はパスワードの入力を求めずに失敗します)、失敗した場合はエージェントにキーを追加してsshコマンドを再実行します。