带有 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 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

OpenSSH的RSA/DSA密钥认证系统

将 SSH2 密钥转换为 OpenSSH 格式

Openssh到IOS邮件

如何使用 Bouncy Castle 创建与 OpenSSH 兼容的 ED25519 密钥?

openssh配置密钥进行远程访问

sshd 的 Windows 10 OpenSSH 授权密钥错误