web-dev-qa-db-ja.com

ログイン時にssh-agentをロードする

CentOS 5、MediaTemple(dv)サーバーにログインするたびに、次のことを行う必要があります。

ssh-agent $BASH
ssh-add .ssh/my_id

ログインできたら。これは、サーバーがgitワークフローに参加するために使用されます。開発中にかなりの反復を行うため、同じことを何度も繰り返すことにうんざりしています。

これをサーバーの.bash_profileに追加してもうまくいきません。また、sshについての理解が非常に限られているため、ssh_agent $BASHを実行すると、新しいログインウィンドウが生成されるだけです(したがって、ファイルの次の行の実行が停止します)。 ...)。

リモートでログインするたびにサーバーのキーを機能させるにはどうすればよいですか?

2
Roberto

最も簡単な方法は、SSHでエージェント転送を有効にして、サーバーではなくローカルシステムでエージェントを使用するようにすることです。それができない場合は、manページに示されているように実行してeval $(ssh-agent -s)を実行できます。

これは、数か月前に.bashrcで作業して使用しているチーム用に作成したスクリプトからコピーされたものです。アイデアのコレクションからコンパイルされ、非互換性が見つかったため、複数のオペレーティングシステム/環境で動作するように調整されました。実行中のエージェントをチェックし、必要に応じてエージェントを開始します(他のシェルのデータを保存します)。次に、そのエージェントにキーが追加されているかどうかを確認し、追加されていない場合は、使用確認を使用して10時間(平日用に設計)追加します。必要に応じて、ssh-addの-cオプションを削除することで確認を削除できます。

SSH_ENV="$HOME/.bash_sshagent"
function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
}
# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep -q ssh-agent$ || {
         start_agent;
     }
else
     start_agent;
fi
/usr/bin/ssh-add -l > /dev/null || {
        echo No ssh identities detected. Running "ssh-add -c -t 36000"...
        /usr/bin/ssh-add -c -t 36000;
}
2
Jeremy M