我最近在 AskUbuntu 上问了一个关于让 ssh-agent 自动保存我的密码保护密钥以供以后重复使用的问题,而无需在 bash 登录期间重新输入密码(非 GUI/Gnome)。我得到了一个不错的 bash 脚本作为响应,但不幸的是,无论 git 操作如何,都会触发它要求输入密码。我只想在他们的密钥不在 ssh-agent 中并且正在执行远程 git 操作时得到提示。
这是因为我$(__git_ps1 "[%s]")
在 bash 提示符中使用来显示当前工作目录 ( pwd
) 的 git 分支。因此,当我 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 操作?它是否直接访问 /usr/bin/ssh 而不是依赖 bash 路径?
您是否有更好的方法来执行此操作或当前脚本的一个很好的解决方法?