最近、AskUbuntuで、bash ログイン中にパスフレーズを再入力しなくても後で再利用できるように、ssh-agent でパスフレーズで保護されたキーを自動的に保存する方法について質問しました (非 GUI/Gnome)。応答で素敵な bash スクリプトを取得しましたが、残念ながら、git 操作に関係なく、パスフレーズを要求するようにトリガーされます。キーがまだ ssh-agent になく、リモートの git 操作が実行されている場合にのみプロンプトが表示されるようにします。
これは$(__git_ps1 "[%s]")
、現在の作業ディレクトリ ( ) の git ブランチを表示するために bash プロンプトで使用しているためpwd
です。そのため、マシンに ssh すると、bash プロンプトをレンダリングする前に、すぐにキーのパスフレーズを求められます!
AskUbuntu に関する私の質問への回答からの現在のスクリプトは次のようになります。
で~/.bash_profile
:
# File: ~/.bash_profile
# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
. ~/.profile
fi
# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
echo "Starting ssh agent"
eval $(ssh-agent -s)
agent_started=1
fi
# ssh become a function, adding identity to agent when needed
ssh() {
if ! ssh-add -l >/dev/null 2>-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/ssh "$@"
}
export -f ssh
# another example: git
git() {
if ! ssh-add -l >/dev/null 2>-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/git "$@"
}
export -f git
ご覧のとおり、すべての git 操作で git 関数がトリガーされます。
git を使用して接続を行うと思っていましたが、上記のスクリプトで関数ssh
をトリガーするようには見えません。ssh()
git はどのように ssh 操作を実行しますか? bash パスに依存するのではなく、/usr/bin/ssh に直接アクセスしますか?
これを行うためのより良い方法、または現在のスクリプトの優れた回避策はありますか?