反向 ssh-agent 转发。使用远程 ssh 密钥

反向 ssh-agent 转发。使用远程 ssh 密钥

我在密钥服务器上有 github.com 的私有 ssh 密钥ssh-agent。我想从 NAT 后面的家用电脑运行git pull并使用我的 github ssh 密钥。

我知道的唯一方法是通过 ssh 进入密钥服务器并转发端口 22,然后在转发代理的同时通过 ssh 返回我的家用计算机,然后git pull在新的 shell 中运行,如下所示:

home$ ssh keyserver -R10022:localhost:22
keyserver$ ssh -A localhost -p10022
home$ git pull

有没有更简单的方法来使用远程 ssh 密钥?

答案1

在与您类似的场景中,我使用了两种不同的方法。

  1. 本地启动代理
  2. 转发到服务器
  3. 使用 ssh-add 将密钥从服务器添加到本地代理(可选择限制有效期)
  4. 从服务器注销
  5. 随意使用当地代理商提供的密钥

或者

  1. 本地启动代理
  2. ssh 服务器 cat 密钥文件 | ssh-add /dev/stdin

如果服务器的配置方式不允许你的密钥离开服务器,上述两种方法都行不通。在这种情况下,没有任何解决方案比你自己的方法更简单。但有一些替代方案,可以提供更好的用户体验和/或安全性。

此命令将打开您在自己的示例中使用的同一对 ssh 连接。但随后返回到启动 shell,您可以在其中使用转发的代理。

export $(grep -m1 ^SSH_AUTH_SOCK= <(
ssh -n -R10022:localhost:22 keyserver ssh -A localhost -p10022 "'env ; sleep 99999'"))

答案2

从 OpenSSH 6.7 (2014-10-06) 开始,有一个选项可以实现反向 ssh-agent 转发的目标。该功能是 Unix 域套接字转发。

例子:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.sock
ssh -NfL $SSH_AUTH_SOCK:/remote/path/to/ssh-agent.sock keyserver

这会通过 ssh 将本地套接字转发到远程密钥服务器的 ssh-agent 套接字并在后台进行分叉。

注意:此方法适用的安全警告与 ssh(1) 手册页中常规代理转发中相同的安全警告。
此外,可能存在比反向 ssh-agent 转发更好的解决方案,例如 kasperd 的答案。此答案是针对问题的直接回答,以保证完整性,但不一定是最好的解决方案。

相关内容