我在密钥服务器上有 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
在与您类似的场景中,我使用了两种不同的方法。
- 本地启动代理
- 转发到服务器
- 使用 ssh-add 将密钥从服务器添加到本地代理(可选择限制有效期)
- 从服务器注销
- 随意使用当地代理商提供的密钥
或者
- 本地启动代理
- 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 的答案。此答案是针对问题的直接回答,以保证完整性,但不一定是最好的解决方案。