2011-04-26 70 views
2

我最近问了一个question on AskUbuntu关于让ssh-agent自动保存我的密码保护密钥供以后重新使用,而不必在bash登录(非GUI/Gnome)期间重新输入密码。我收到了一个很好的bash脚本,但不幸的是,无论git操作如何,都会触发它请求密码。我只想提示他们的密钥是否已经在ssh-agent中,并且正在执行远程git操作。如何获取远程git操作来触发ssh-agent的ssh-add事件?

这是由于我在我的bash提示中使用了$(__git_ps1 "[%s]")来显示当前工作目录(pwd)的git分支。所以当我进入机器时,它会立即要求我输入密钥密码,然后才能显示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 "[email protected]" 
} 
export -f ssh 

# another example: git 
git() { 
    if ! ssh-add -l >/dev/null 2>-; then 
    ssh-add ~/.ssh/id_dsa 
    fi 
    /usr/bin/git "[email protected]" 
} 
export -f git 

所以你可以看到git的功能被触发每个git的操作。

我以为git会使用ssh来建立连接,但它似乎并没有触发上述脚本中的ssh()函数。 git如何执行其ssh操作?它直接访问/ usr/bin/ssh而不是依赖bash路径吗?

你有没有更好的方法来做到这一点或为当前脚本一个很好的解决方法?

+0

git可执行文件/ usr/bin/git不是用bash(AFAIK)写的,所以没有理由执行你的ssh函数。 – nhed 2011-04-26 13:40:57

+0

@nhed那是我的假设。我想知道我是否可以用bash'ssh'包装器脚本替换'/ usr/bin/ssh',这样它会被触发? – Treffynnon 2011-04-26 13:49:45

+0

听起来很危险,git的man-page提到了一个env变量GIT_SSH--让这个指向一个包装器 - 这可能更清晰。给我一杆 – nhed 2011-04-26 19:06:05

回答

3

即使您以递归方式ssh到多个主机,也可以使用代理转发。当ssh首次请求密钥时,您的本地代理运行$SSH_ASKPASS并将解锁的密钥转发给主机。请注意,您必须启用座席转接(请参阅man 5 ssh_config)。

在〜/ .ssh/Config启用转发你需要每台主机:

Host example.org 
    ForwardAgent yes 

在服务器端代理转发默认情况下启用。

如果你不想使用代理转发出于某种原因,那么我认为重写ssh命令是你唯一的选择。

+0

我忘记了'AgentForwarding'。良好的通话,它完美适合我特定的工作流程。 – Treffynnon 2011-04-27 08:24:38

-2

我不会在您的密钥中推荐密码短语。像gitolite这样的事情不会很好。考虑使用没有密码短语的新密钥。

我的$ 0.02

+0

我不使用gitolite,所以我没有看到这是一个问题。我不相信足够的坐在我的磁盘上有一个无保护的密钥,我永远不会有一个,除了一个真正锁定的自动化进程帐户。我不明白密码是如何影响git的,因为它都是在ssh层处理的,而不是在git本身中处理的。 – Treffynnon 2011-04-26 14:53:25

相关问题