避免 SSH 代理转发不兼容的密钥

避免 SSH 代理转发不兼容的密钥

早上好,我有一个 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 机器上所需要的密钥。

相关内容