【发布时间】:2011-08-12 23:33:46
【问题描述】:
我最近向question on AskUbuntu 询问了关于让 ssh-agent 自动保存我的密码保护密钥以供以后重复使用,而无需在 bash 登录期间重新输入密码(非 GUI/Gnome)。我得到了一个不错的 bash 脚本作为响应,但不幸的是,无论 git 操作如何,都会触发它要求输入密码。我只想在他们的密钥不在 ssh-agent 中并且正在执行远程 git 操作时得到提示。
这是因为我在 bash 提示符中使用了$(__git_ps1 "[%s]") 来显示当前工作目录的 git 分支 (pwd)。因此,当我 ssh 进入机器时,它会立即要求我输入密钥密码,然后才能呈现 bash 提示!
the answer to my question on 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路径吗?
对于当前脚本,您有更好的方法或解决方法吗?
【问题讨论】:
-
git 可执行文件 /usr/bin/git 不是用 bash (AFAIK) 编写的,所以它没有理由执行你的 ssh 函数。
-
@nhed 那是我的假设。我想知道是否可以用 bash
ssh包装脚本替换/usr/bin/ssh以便触发它? -
听起来很危险,git 手册页提到了一个环境变量 GIT_SSH - 将其指向一个包装器 - 这可能会更干净。试一试
标签: git bash ubuntu ssh-keys ssh-agent