![避免 SSH 代理转发不兼容的密钥](https://linux22.com/image/784611/%E9%81%BF%E5%85%8D%20SSH%20%E4%BB%A3%E7%90%86%E8%BD%AC%E5%8F%91%E4%B8%8D%E5%85%BC%E5%AE%B9%E7%9A%84%E5%AF%86%E9%92%A5.png)
早上好,我有一个 ed25519-sk 密钥(使用硬件令牌),我只在个人机器上为一些高安全性服务器(所有 Debian)使用它。OpenSSH 8.3+ 支持此密钥类型。我们还有两台机器运行 RHEL 7,提供 OpenSSH 7.2。
现在代理转发中存在一个实现故障。它似乎将目录中的所有密钥~/.ssh/
作为字节流发送。它没有检查密钥在服务器端是否需要或兼容。
如果只有一个不兼容的密钥,则根本不会传输任何密钥。甚至没有兼容的。
server $ ssh-add -l
error fetching identities for protocol 1: agent refused operation
error fetching identities for protocol 2: invalid format
The agent has no identities.
需要明确的是,我不需要服务器上的 ed25519-sk 密钥,但我需要在这里启用 ForwardAgent,因为我们使用它来访问 Git 存储库。
一种解决方法是将 ed25529-sk 密钥移出~/.ssh/
目录。
有人知道如何实现以下两个目标吗?
- 将 ed25529-sk 密钥保存在本地机器的
~/.ssh
目录中 - 将所有其他|兼容密钥转发到服务器
答案1
您似乎误解了ForwardAgent
工作原理。
当您通过 SSH 启用代理转发时,它实际上会$SSH_AUTH_SOCK
通过安全隧道将您的本地 UNIX 套接字转发到远程计算机。这意味着ssh-add -l
远程计算机上的进程ssh-agent
与您本地计算机ssh-add -l
上的进程相同。因此,它无法过滤任何内容,因为它只是一个RemoteForward
带有一些额外功能的“傻瓜”(创建放置套接字的远程目录并设置适当的环境变量)。
您要么需要生成一个单独的存储库ssh-agent
来进行转发,要么对您的 git 存储库进行不同的身份验证。
答案2
我设法通过使用命令来解决这个问题
ssh-agent ssh -A myhost
以这种方式使用时,将启动一个新的 SSH 代理,然后只将访问 myhost 的密钥添加到代理中,这是我在 CentOS 7 机器上所需要的密钥。