SSH 経由でログイン時に ssh-agent と ssh-add を実行する簡単な方法はありますか?

SSH 経由でログイン時に ssh-agent と ssh-add を実行する簡単な方法はありますか?

SSH 経由でサーバーにログインするときに、次のコマンドを自動実行するようにしています。

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

私の SSH キーにはパスフレーズがあり、ログインごとに 1 回入力するだけで問題ありません。

これを .bashrc ファイルに追加しようとしましたが、ssh-agent が新しい bash セッションを開始するようです。これを .bashrc に追加した後でログインしようとすると、スタックしてしまい、「exit」と入力して「キーのロックを解除するにはパスフレーズを入力してください」というプロンプトが表示されることになります。

他に何か提案はありますか?

サーバーはUbuntu LTSを実行しています

答え1

以下を追加してみてください:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

この方法では、ssh-agent新しいシェルは起動されず、バックグラウンドで起動し、適切な環境変数を設定するためのシェル コマンドを出力します。

コメントにもあるように、そうかもしれませんないエージェントをリモートホストではなく、作業しているボックスで実行したい場合は、

ssh -A remote-host

ローカル SSH エージェントのサービスをリモート ホストに転送します。

セキュリティ上の理由から、エージェント転送は信頼できる人が実行するホストでのみ使用する必要がありますが、完全なエージェントをいつでもリモートで実行するよりも優れています。

答え2

もう 1 つの方法は、これを .bashrc に追加することです。これには Erik の回答と同じ利点 (単一のインスタンスの確保) がありますが、追加のパッケージは必要ありません。

# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
    echo Starting SSH Agent
    eval $(ssh-agent -s)
fi

少なくとも 1 つのキーがロードされていない場合は ssh-add を実行し、キーのタイムアウトを 1 日に設定します。

ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
     echo Adding keys...
     ssh-add -t 1d
fi

答え3

代替案としては、Funtooのキーチェーン次に、次のワンライナーを bash シェルに貼り付けます。

eval $(keychain --eval id_rsa)

これは同じこと (ssh エージェントの起動など) を実行しますが、各サブシェルに対して ssh-agent プロセスは実行されません。代わりに、所有している「すでに実行中の」インスタンスを検索し、それらに接続します。

答え4

また、SSH 接続キープアライブがある場合は、-A有効にする前に既存の接続ファイルを削除する必要があることに注意してください。 内のすべての SSH 接続ファイルを削除します/tmp/[host]

関連情報