带有 openssh 密钥的 TortoiseGit 未使用 ssh-agent 进行身份验证
Posted
技术标签:
【中文标题】带有 openssh 密钥的 TortoiseGit 未使用 ssh-agent 进行身份验证【英文标题】:TortoiseGit with openssh key not authenticating using ssh-agent 【发布时间】:2012-11-11 01:16:55 【问题描述】:我正在 Windows XP (msysGit 1.7.11, TortoiseGit 1.7.14) 上设置一个 git 环境,并试图达到以下几点:
在不同于默认 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 私钥。自动身份验证(选美)工作但设置失败,因为 TortoiseGit 无法识别格式为 gitolite@gitbox/repo.git 的 git repos url。
然后我决定使用 openssh 客户端安装 TortoiseGit,以便 ssh 客户端可以读取 config 文件,并模仿 git CLI 设置。
我在 TortoiseGit 设置中选择了 msys git 附带的 ssh.exe 作为 ssh 客户端。
执行git pull
时,远程 url 现在已解析,但在我希望 ssh-agent 自动身份验证发生时询问密码密码。
是否可以让 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
仍然要求我输入密码。
【问题讨论】:
【参考方案1】:无需调整。
只要让 TortoiseGit 指向 git 本身使用的同一个 ssh 客户端,看截图:
这在最新版本的 Git 中应该是 C:\Program Files\Git\usr\bin\ssh.exe
,正如 Aleksey Kontsevich 在 cmets 中提到的那样。
【讨论】:
在最新的 Git 版本中是 - C:\Program Files\Git\usr\bin\ssh.exe 经过一番麻烦,找到了这个,恕我直言,这就是这样做的方法。只需在 git-bash 中设置身份并在 Tortoise 中使用它 如果你在安装tortoise git时选择使用git ssh客户端而不是他们的“推荐”客户端,这一步可能可以避免。 似乎是 TortoiseGit(我的 2.5.0.0 64 位版本)中的一个错误,如果您更改 SSH 客户端,确定按钮不会执行任何操作。要解决此问题,我也单击了“启用代理服务器”。然后重新打开对话框检查状态是否正确(由于我没有输入任何代理设置,它再次取消选中) 在我的情况下没有C:\Program Files\Git\usr\bin\ssh.exe
,但发现 C:\Windows\System32\OpenSSH\ssh.exe
似乎有效【参考方案2】:
我首先使用 Plink 安装 TortoiseGit 并使用 Pageant 加载 ssh 私钥。自动身份验证(选美)工作但设置失败,因为 TortoiseGit 无法识别格式为 gitolite@gitbox/repo.git 的 git repos url。
我终于找到了一种解决方法,它包括创建一个与 ssh 别名同名的 PuTTY 会话(即问题中的 gitbox)。
这样我就可以在 CLI 中克隆为git clone gitbox/monrepo
,并且TortoiseGit 可以正确处理origin
语法。
【讨论】:
【参考方案3】:1) 赛格温
使用以下文章中描述的方法: https://help.github.com/articles/working-with-ssh-key-passphrases
在 cygwin 会话启动时只会询问一次密码。 !!!在退出 cygwin 会话之前不要忘记杀死 ssh-agent 进程(使用 ps 查找进程 PID 并杀死 -9)。
我们对 cygwin 使用单独的方法,因为 cygwin 出于某种原因在 windows 环境中看不到外部启动的进程。
2, 3) MsysGit, TortoiseGit
有用的链接: http://dogbiscuit.org/mdub/weblog/Tech/WindowsSshAgent
安装 MsysGit。 安装 TortoiseGit(在安装过程中检查 openssh 而不是 plink)。 !!!检查系统变量。如果存在 GIT_SSH 变量 - 将其删除。
进入 TortoiseGit->设置->常规
将 Git exe 路径设置为 /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
就是这样。从那一刻起,您可以从 TortoiseGit 和 MsysGit 执行 git push、git pull,而无需提示密码。
当不再需要 ssh-agent 时,您可以通过 Windows 任务管理器将其杀死。
【讨论】:
【参考方案4】:以上答案都不适合我。
我创建了这个批处理文件来解决这个问题。
CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"
运行一次,然后输入您的密码。
然后您可以将 tortoisegit 与 openssh 一起使用,而无需为每个操作输入密码。
【讨论】:
我也无法让 TortoiseGit 与上述任何解决方案一起工作。只有这对我有用。谢谢!【参考方案5】:似乎有多种选择可以解决这个问题。由于上述方法对我没有任何帮助,我坚持要分享对我有帮助的方法。
Screenshot: Network settings / Git SSH Client
在Settings... -> Network -> SSH -> SSH client
中,将客户端设置为C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
。使用 Pageant,您将按预期自动进行身份验证,否则会提示您输入私钥密码。确保在推送对话框中选中“Autoload Putty Key”选项。
【讨论】:
这也适用于我在 Windows 10 上使用 64 位 Git for Windows,因为我使用 Putty + Pageant 组合来通过 SSH 访问我公司的服务器。另外,我的环境变量GIT_SSH
设置为C:\Program Files\PuTTY\plink.exe
【参考方案6】:
确保在定义了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?”)
【讨论】:
以为是这样,但没有,没有任何改变(参见编辑#1)。关于serverfault.com/a/198614,只是为了确定:仅在使用Putty键而不是openssh时才需要提及每个遥控器的键? @kraymer 您是否尝试使用远程仓库地址:gitbox:repo.git
?
使用 openssh 客户端 - 我的首选 - 我都尝试了(使用完整的 ssh://... 地址和 gitbox 别名),两者都有效,只是它一直要求我输入密码手动。
@kraymer 并且您的 ssh-agent 确实在定义了 %HOME%
的环境中运行?【参考方案7】:
由于这里的解释有点过时,我决定发布我的解决方案。
我在 Windows 10 中使用 Git Bash 和 TortoiseGit 2.8.0,现在很常见。
我在Settings->Network
中将ssh.exe
设置为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 logo+R shell:startup
将脚本添加到启动文件夹。或者,您可以将脚本添加到注册表中以保证它在其他进程之前运行:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
确保键入 exit
以关闭控制台并允许为将来的进程设置变量。
【讨论】:
【参考方案8】:Windows10 系统 #TortoiseGit 在网络部分 来自:C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe To : "C:\Usersuser\AppData\Local\Programs\Git\usr\bin\ssh.exe"
【讨论】:
【参考方案9】:如果您在存储库中使用 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,并且不使用任何 Putty。
【讨论】:
以上是关于带有 openssh 密钥的 TortoiseGit 未使用 ssh-agent 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章