我们可以称之为典型的多跳 ssh 示例,我们可以看到以下命令将把用户的 ssh 流量路由到三个(虚构的)连续节点:
ssh ruapehu.example.com ssh aoraki ssh tongariro
名为ruapehu.example.com
、aoraki
和tongariro
。该示例通过使用代理命令简化了配置。该方案的一个弱点是前两个节点可以读取流量,而如果它们不能这样做会更好。如果我们设法在链中引入命令 [encrypt] 和 [decrypt],我们实际上可能接近 tor 网络所做的。另一个问题是如何在多跳链中引入端口转发?以下显然行不通,但这几乎是我想要做的:
[加密] ssh ruapehu.example.com ssh aoraki ssh tongariro [解密] -L 80:somesite.com:80
有人能让这样的事完成吗?
答案1
你问了两个问题:
- 我们如何确保通过中间主机的流量不被“嗅探”?
答案是您不需要做任何事情。 每个ruapehu
ssh 连接已加密。和所“看到”的流量aoraki
并不明文。 您无需添加任何额外的加密层。
- 如何启用到目的地的端口转发?
最简单的答案是使用该~/.ssh/config
文件并仅为目标添加指令,如(借用您自己的参考资料,仅添加最后的线):
Host ruapehu
HostName ruapehu.example.com
Host aoraki
ProxyCommand ssh -q ruapehu nc -q0 aoraki 22
Host tongariro
LocalForward 80:somesite.com:80
ProxyCommand ssh -q aoraki nc -q0 %h 22
也就是说,假设您可以在本地主机上打开端口 80,否则您可能必须使用非特权端口,即 1024 以上的端口(取决于您的主机和配置)。
答案2
如果您一步创建从您的机器到目标机器的转发端口,然后通过该转发端口发出 SSH 连接,那么您基本上就可以实现您在上一个示例中描述的内容。
创建端口转发:
# jump from aoraki -> tongariro ssh ruapehu.example.com "ssh -L 2222:tongariro:22 aoraki" # jump from ruapehu.example.com -> aoraki ssh -L ruapehu.example.com:2222:aoraki:2222 ruapehu.example.com
这期望您已经适当设置了您的服务器
GatewayPorts
,这样您将能够从外部绑定端口 2222。ssh
发起与目标服务器的新连接:ssh -p 2222 ruapehu.example.com
此连接将在所有中间步骤中加密,您还可以通过它设置另一个端口转发。