TortoiseGit与openssh密钥不使用ssh-agent进行身份验证

时间:2012-11-22 15:45:36

标签: ssh ssh-keys openssh tortoisegit ssh-agent

我正在Windows XP上设置一个git环境(msysGit 1.7.11,TortoiseGit 1.7.14)并尝试实现以下几点:

  • 与默认端口22不同的端口上的ssh连接
  • 由ssh-agent处理的ssh身份验证

所以我创建了一个〜/ .ssh / config 文件:

Host gitbox
   User gitolite
   Hostname XX.XX.XX.XX
   Port 154
   PreferredAuthentications publickey
   IdentityFile "/c/Documents and Settings/kraymer/.ssh/id_rsa"

使用git bash CLI时,一切都按预期工作。

我正在与TortoiseGit斗争 我首先使用Plink安装TortoiseGit并使用Pageant加载ssh私钥。自动身份验证(Pageant)工作但设置失败,因为TortoiseGit无法识别格式为 gitolite@gitbox/repo.git 的git repos url。

然后我决定使用openssh客户端安装TortoiseGit,因此ssh客户端可以读取 config 文件,并模仿git CLI设置。
我在TortoiseGit设置中选择msys git附带的 ssh.exe 作为ssh客户端。
执行git pull时,远程网址现已解析,但在我预计会发生ssh-agent自动身份验证时会询问密码短语密码。

https://dl.dropbox.com/u/1026715/tortoisegit.png

是否可以使TortoiseGit与ssh-agent一起使用?
或者让TortoiseGit(Plink)知道 .ssh / config

编辑#1

按照@VonC建议我配置了我的$ HOME变量 当我在TortoiseGit中单击显示环境变量时,我现在有:

 HOME=C:\Documents and Settings\kraymer  
 HOMEDRIVE=C: 
 HOMEPATH=\Documents and Settings\kraymer 

git pull仍需要我输入密码。

8 个答案:

答案 0 :(得分:79)

不需要调整。

让TortoiseGit指向git本身使用的同一个ssh客户端,请看截图:

enter image description here

这应该是Aleksey Kontsevich在评论中提到的最新版Git中的C:\Program Files\Git\usr\bin\ssh.exe

答案 1 :(得分:4)

  

我首先使用Plink安装TortoiseGit并使用Pageant加载ssh私钥。自动身份验证(Pageant)工作但设置失败,因为TortoiseGit无法识别格式为gitolite@gitbox/repo.git的git repos url。

我终于找到了一个解决方法,包括创建一个与ssh别名相同的PuTTY会话(即问题中的 gitbox )。
这样我就可以在CLI中克隆为git clone gitbox/monrepo,并且TortoiseGit正确处理origin语法。

答案 2 :(得分:4)

1)Cygwin

使用以下文章中描述的方法: https://help.github.com/articles/working-with-ssh-key-passphrases

在cygwin会话启动时只会询问一次密码。 !在退出cygwin会话之前,不要忘记杀死ssh-agent进程(使用ps查找进程PID和kill -9)。

我们正在使用cygwin的单独方法,因为cygwin由于某种原因没有看到在Windows环境中从外部启动进程。

2,3)MsysGit,TortoiseGit

有用的链接: http://dogbiscuit.org/mdub/weblog/Tech/WindowsSshAgent

安装MsysGit。 安装TortoiseGit(在安装过程中检查openssh而不是plink)。 !检查系统变量。如果存在GIT_SSH变量 - 将其删除。

转到TortoiseGit->设置 - >常规

将Git exe Path设置为/ bin 将外部dll路径设置为/ mingw / bin

转到TortoiseGit->设置 - >网络 将SSH客户端属性设置为/bin/ssh.exe

定义系统变量SSH_AUTH_SOCKS = C:\ temp.ssh-socket

启动cmd.exe并执行以下命令(因为我们安装了MsysGit,所有以下命令都可以在cmd中访问 - / bin添加到系统PATH变量中):

# following command is required to execute for avoiding Address already bind message when ssh-agen is not started yet but .ssh-socket exists after previous agent session
rm "%SSH_AUTH_SOCK%"

# Starting ssh-agent
ssh-agent -a "%SSH_AUTH_SOCK%"

# Adding our openssh key
ssh-add "%USERPROFILE%\.ssh\id_rsa"

# Type password for your key

就是这样。从那一刻起,您可以在不提示密码的情况下执行git push,来自TortoiseGit和MsysGit的git pull。

当不再需要ssh-agent时,您可以通过Windows任务管理器终止它。

答案 3 :(得分:3)

上述答案都不适合我。

我创建了这个批处理文件来解决问题。

CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"

运行一次,然后输入您的密码。

然后你可以使用tossisegit和openssh而不必为每个操作输入你的密码。

答案 4 :(得分:2)

确保在定义HOME的环境中启动TortoiseGit,并引用.ssh的父目录。
这很重要,因为在Windows上,默认情况下未定义HOME。

请参阅示例:“Auth fails on Windows XP with git and tortoisegit” (其他可能的来源:“How to I tell Git for Windows where to find my private RSA key?”)

答案 5 :(得分:2)

似乎有各种各样的选择来解决这个问题。由于以上都没有对我有用,我认为我会分享对我有用的东西。

Screenshot: Network settings / Git SSH Client

Settings... -> Network -> SSH -> SSH client中,将客户端设置为C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe。使用Pageant,然后按预期自动进行身份验证,否则系统会提示您输入私钥密码。确保在推送对话框中选中“Autoload Putty Key”选项。

答案 6 :(得分:2)

由于此处的说明有些过时,所以我决定发布解决方案。

我正在Windows 10中使用Git Bash和TortoiseGit 2.8.0,这很常见。

如先前文章所述,我在ssh.exe中将Settings->Network设置为SSH客户端。

我使用以下命令创建了一个脚本,如上一条注释中所述。如果您的系统没有自动执行此操作,则可能还需要设置HOME环境变量。假设您的家在驱动器H:\中,则可以添加以下行:

SETX HOME /h
CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"

我使用 Win徽标 + R shell:startup将脚本添加到了启动文件夹。另外,您可以将脚本添加到注册表中以确保它在其他进程之前运行:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

确保输入exit以关闭控制台,并允许为以后的过程设置变量。

答案 7 :(得分:1)

如果您在存储库中使用RSA密钥,请按如上所述在脚本末尾添加^

CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
...
"C:\Program Files\Git\usr\bin\ssh-add"  ~/.ssh/myid.rsa

可与Git 2.24.0,TortoiseGit 2.9.0,Windows 10配合使用,并且不使用任何腻子。