我正在排除 SSH 服务器(供应商的服务器,不是我的)的访问故障。我有一个带有密码和身份验证子密钥的 rsa4096 GPG 密钥。我导出了子密钥的 ssh 密钥,仔细检查了它是否正确,然后发送了它,但我无法访问服务器。
我将身份验证 keygrip 添加到 ~/.gnupg/sshcontrol、enable-ssh-support
~/.gnupg/gpg-agent.conf 和use-agent
~/.gnupg/gpg.conf。我还将以下内容添加到我的 .bashrc 中
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
为了进行故障排除,我使用了详细选项,并注意到我添加的所有身份验证密钥和不存在的 ./.ssh/id_* 密钥都被尝试了。我想通过在 ~/.ssh/config 中为其主机指定 IdentitiesOnly 和 IdentityFile 选项来指定用于身份验证的密钥。所以我尝试了两件事:
- 使用 gpg 导出私有子密钥并将其路径添加为 IdentiyFile。这不起作用,因为“libcrypto 错误”。我读到这是与格式有关,其中 gpg 不立即兼容 ssh 密钥。
- 使用 gpg 导出公钥(尝试了带装甲和不带装甲的两种方式),并将其路径添加为 IdentiyFile。这也不起作用,日志显示相同的“libcrypto 错误”。奇怪的是,它们表明正在尝试将其作为私钥。
debug1: Trying private key: /home/me/.ssh/gpg.pub
我不能排除供应商在注册我的密钥时出错的可能性,但也不能排除我没有做错任何事的可能性。有什么想法吗?
我使用 gpg 2.2.27
它不起作用是因为这两个程序使用完全不同的密钥格式——非 PGP 软件不会自动理解 PGP 密钥文件。
您需要以 OpenSSH 格式导出公钥,即以与您之前提取“ssh-rsa”字符串以上传到服务器的方式相同。
您可以使用它
ssh-add -L
来获取代理中当前的所有公钥,或者只是将密钥从服务器的authorized_keys复制回本地id_foo.pub文件。