Windows下的gpg-agent作为git bash的SSH Agent

Ron*_*Ron 5 ssh git gpg4win gnupg gpg-agent

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

我一直在努力弄清楚如何在 Windows 和 git-bash 中实现这项工作。(请不要建议我使用 putty,因为我有很多脚本和其他程序需要在我的 windows pc 机器上使用 git bash 和 openssh,包括 PHPStorm 等)

我的第一次尝试是enable-ssh-supportC:\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 秘密密钥,带有启用身份验证和加密的子密钥。

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

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

然后我执行: gpg-connect-agent killagent /byegpg-connect-agent /byePowerShell中(并开始在后台运行的GPG代理并创建了S.gpg-agent.sshSOCK文件)。

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

它给了我一个错误。

然后我尝试启用腻子支持(enable-putty-support行中gpg-agent.conf允许您启用腻子支持。

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

然后我也尝试使用带有巧克力包管理器的 OpenSSH。

他们都没有按预期工作。

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

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

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

你能看出我的问题吗?在腻子日志中

Vla*_*čík 3

让我们一步一步来。

1. Pageant has 0 SSH-2 keys

这现在正在阻止你。我假设您日志报告选美,但实际上您正在后台运行 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
Run Code Online (Sandbox Code Playgroud)

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

2.待定