便宜上、最適な方法はjmtdとFaheemの回答の組み合わせです。
ssh-agent
単独で使用すると、ssh-agent
新しい端末を開くたびに新しいインスタンスを作成する必要があります。keychain
初期化すると、秘密鍵のパスフレーズが要求され、保存されます。そうすれば、秘密鍵はパスワードで保護されますが、パスワードを何度も入力する必要はありません。
アーチのwikiにはからキーチェーンの初期化をお勧め/etc/profile.d/
のような、または自分のシェルプロファイルを.bash_profile
か.bashrc
。これには、端末を開くとすぐにキーチェーンが初期化されるという欠点があります。
より柔軟なアプローチはkeychain
、特定のtmux
セッションと組み合わせることです。だから、で.bash_profile
:
tsess=$(tmux ls 2>&1)
if [[ "${tsess%%:*}" = "secured" ]] &&
[[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
# start keychain
/usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
. $HOME/.keychain/$HOSTNAME-sh
fi
...そして、tmux
必要に応じて(キーバインドから起動された)セキュリティ保護されたセッションを開始するだけです。
#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"
if [[ -z "$SSH_AUTH_SOCK" ]]; then
eval `ssh-agent`
trap "kill $SSH_AGENT_PID" 0
fi
if [[ -z "$PID" ]]; then
urxvtc -title "SSH" -e sh -c "${new}"
else
urxvtc -title "SSH" -e sh -c "${old}"
fi
ssh-add
これで、キーチェーンは特定のtmux
セッションを開始するときに一度だけ初期化されます。そのセッションが続く限り、これらのssh
キーにアクセスし、リモートリポジトリにプッシュできます。
eval
ただ入力できるのは何のポイントssh-agent
ですか?