Windows 下使用 Gpg-agent 作为 git bash 的 SSH 代理

Windows 下使用 Gpg-agent 作为 git bash 的 SSH 代理

gpg-agent 有选项“--enable-ssh-support”和“--enable-putty-support”,允许它用作众所周知的 ssh-agent 的替代品。

我一直在绞尽脑汁试图弄清楚如何在 Windows 和 git-bash 中实现这一点。(请不要建议我使用 putty,因为我的 Windows PC 机器上有很多脚本和其他程序需要与 git bash 和 openssh 一起使用,包括 PHPStorm 等)

我的第一次尝试是在文件enable-ssh-support中输入一行,C:\Users\[user]\AppData\Roaming\gnupg\gpg-agent.conf

export SSH_AUTH_SOCK=/c/users/[user]/AppData/Roaming/gnupg/S.gpg-agent.ssh在文件中行/c/users/[user]/.bash_profile。(我还创建了一个SSH_AUTH_SOCK值为的Windows 环境变量C:\Users\[username]\AppData\Roaming\gnupg\S.gpg-agent.ssh

我的密钥环中有一个 GPG 密钥,其中包含启用了身份验证和加密的子密钥。

并且我将启用身份验证子键的 keygrip 添加到C:\Users\[user]\AppData\Roaming\gnupg\sshcontrol文件中。

由于 GnuPG 2.2.4 附带——导出SSH密钥选项,所以我不需要monkeysphere将 GPG 密钥转换为 OpenSSH 格式。所以我导出了我的公钥,并将其放在具有正确权限的远程 Linux 机器中的 authorized_keys 文件中(使用 putty 在另一台计算机上进行测试)。

然后我在 PowerShell 中执行: gpg-connect-agent killagent /byegpg-connect-agent /bye(它启动了在后台运行的 gpg-agent 并创建了S.gpg-agent.sshSOCK 文件)。

然后尝试以常规方式通过 ssh 进入服务器。

它给了我一个错误。

然后我尝试启用 putty 支持(enable-putty-supportgpg-agent.conf允许您启用 putty 支持。

您还需要在 Windows 中创建一个环境变量 GIT_SSH='C:\ProgramData\chocolatey\bin\PLINK.EXE')

然后我也尝试使用 chocolatey 包管理器附带的 OpenSSH。

它们都没有按预期发挥作用。

最后,我放弃了一切,尝试仅使用 putty 和 gpg-agent 进行连接。我也卸载了 git-bash。然后我尝试使用 GnuPG 和 Putty。

我允许在 putty ssh -> auth 中进行代理转发。然后我尝试连接到服务器,但它仍然要求输入密码。gpg-agent 不会转发密钥,但它检测到gpg-agentasPAGEANT

Putty 中的事件日志:

2018-02-10 16:48:51 Connecting to xx.xxx.xxx.xx port 22 2018-02-10 16:48:51 We claim version: SSH-2.0-PuTTY_Release_0.70 2018-02-10 16:48:52 Server version: SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8 2018-02-10 16:48:52 We believe remote version has SSH-2 channel request bug 2018-02-10 16:48:52 Using SSH protocol version 2 2018-02-10 16:48:52 Doing ECDH key exchange with curve Curve25519 and hash SHA-256 2018-02-10 16:48:53 Server also has ecdsa-sha2-nistp256/ssh-dss/ssh-rsa host keys, but we don't know any of them 2018-02-10 16:48:53 Host key fingerprint is: 2018-02-10 16:48:53 ssh-ed25519 256 1f:7b:5d:c4:b4:ae:5d:81:72:da:1d:c8:b2:cc:67:7b 2018-02-10 16:48:53 Initialised AES-256 SDCTR client->server encryption 2018-02-10 16:48:53 Initialised HMAC-SHA-256 client->server MAC algorithm 2018-02-10 16:48:53 Initialised AES-256 SDCTR server->client encryption 2018-02-10 16:48:53 Initialised HMAC-SHA-256 server->client MAC algorithm 2018-02-10 16:49:07 Pageant is running. Requesting keys. 2018-02-10 16:49:07 Pageant has 0 SSH-2 keys

你能发现我的问题吗?在 putty 日志中

答案1

让我们一步一步来。

1. Pageant has 0 SSH-2 keys

这现在正在阻止您。我假设您日志报告了 pageant,但您实际上正在后台运行 gpg-agent。在继续之前,您可能需要仔细检查一下。

让我们确保 gpg-agent 已经加载了您进行 ssh 身份验证所需的密钥。

> gpg --version
gpg (GnuPG) 2.1.21
...

> gpg -k --with-keygrip
...
sub   rsa4096/0x0123456789ABCDEF 2018-01-01 [A] [expires: 2019-01-01]
      Keygrip = 0123456789ABCDEF0123456789ABCDEF01234567
...

> gpg-connect-agent "keyinfo --list" /bye
...
S KEYINFO 0123456789ABCDEF0123456789ABCDEF01234567 T xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OPENPGP.3 - - - - -
...
OK

这样,您就可以确认您的 gpg-agent 已加载您期望的密钥。下一步是确保服务器正在请求正确的密钥。

2.待定

答案2

你想使用https://github.com/rupor-github/win-gpg-agent

安装后,无需更改任何设置,我就能成功调用。现在ssh -o IdentityAgent=\\.\pipe\openssh-ssh-agent -v USER@IP甚至只是简单地工作。使用智能卡中的密钥也能正常工作。ssh USER@IPgitSSH

其他 Windows 版本https://www.gpg4win.org/已经损坏enable-ssh-support ,但项目似乎并不急于修复它:票 1票 2论坛帖子PowerShell github 线程

相关内容