在bash中使用ssh-agent而不是gui进行git push

时间:2019-06-14 20:55:42

标签: git windows-10 openssh ssh-agent git-for-windows

使用Windows的git(git-scm.com)和脚本,我可以让Bash停止询问密码,但是我似乎无法从git GUI中删除密码提示。

到远程的URL使用ssh链接(请参见下文),因此我很确定这不是问题。但是我不是git和SSH的专家。

git@gitlab.com:repo

已使用提供的密码创建了SSH密钥(ED25519),并将公共密钥添加到了托管帐户。 SSH密钥存储在典型位置C:\Users\<user>\.ssh\id_ed25519中。在GUI中单击Help->Show SSH Key时,它显示正在使用的ssh密钥。 ssh-agent在后台运行,并且已通过以下设置将ssh密钥添加到ssh-agent中。

设置ssh代理程序时,我已使用提供的代码here(在下面复制并粘贴以供参考)在.bashrc路径下创建C:\Users\<user>文件。在bash提示符下,一切似乎都按预期运行,但Git GUI却没有。

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

在我看来,执行推入,提取或任何其他相关的远程功能时,Git GUI似乎未使用ssh-agent。在设置ssh-agent,.bashrc脚本和/或GUI来完成删除密码提示时,我是否错过了步骤?还是还有其他事情发生?

非常感谢您提供的所有帮助

2 个答案:

答案 0 :(得分:2)

.bashrc在启动Git Bash时运行。这仅影响bash环境,但对于整个Windows则不起作用。运行GUI时,.bashrc中的所有设置均无效。我在Windows笔记本电脑上的IntelliJ中使用了Git集成,但仍然没有弄清楚如何在其中使用SSH密钥。我目前正在打开Git Bash进行拉动,推动或​​与遥控器交互的任何其他操作。

答案 1 :(得分:2)

查看指南时,我发现here,这使我搜索内容有所不同。最终告诉我使用Putty及其ssh代理为我管理密码。

最终偶然发现了this帖子,他们在其中讨论如何获取git以使用腻子的ssh代理。这只是归因于我将GIT_SSH放入指向plink.exe的环境变量中,该变量位于腻子的安装文件夹中。

使用此方法时,确实会出现一个错误,我不确定这仅仅是我的机器/安装,还是会影响所有人。 here通过在主机中打开腻子和ssh以这种方式生成缓存,解决了该问题。因为已经有关于此的帖子,所以我将不再赘述git为什么不能为我执行此步骤的原因。

还要注意我的上述问题,我在打开git bash时使用.bashrc脚本自动将密钥启动到OpenSSH ssh-agent中。由于采用了这种腻子方法,因此删除了该脚本和所有相关文件。删除的文件的简短列表包括脚本创建的agent.env,保存脚本的.bashrc以及创建的.pash_profile

完成后,git bash和git gui都成功使用了腻子剂,并且无论如何我都可以使用。我什至可以从上下文菜单中启动git gui,让它识别ssh键,而不再提示输入密码。