我目前正在尝试找出如何SSH到防火墙后面拒绝所有传入连接的服务器。服务器可以通过SSH退出,所以我想知道是否有办法让服务器在防火墙后面以创建到我的工作站的SSH隧道,然后允许我的工作站通过它向服务器发送命令?
我已经研究了隧道/反向隧道,但是这些似乎是端口转发解决方案,由于防火墙拒绝所有端口上的所有连接,因此它们无法工作。
理想情况下,我想在Ruby中(使用Net::SSH gem)这样做,而不是像这样打开新的连接:
Net::SSH.start('host', 'user', :password => "password")
我可以以某种方式绑定(bind)到现有隧道。
谢谢!
最佳答案
如果您可以控制服务器,则这非常简单。我将提供命令行版本,您可以将其用于您喜欢的任何框架中:
server$ ssh -R 9091:localhost:22 client.example.egg
client$ ssh -p 9091 localhost
服务器首先建立与客户端的连接,该客户端开始在端口9091(我刚刚组成的端口)上的“R”远程端(即客户端)上进行侦听,并将这些连接转发至
localhost:22
,即转发至自身上的ssh服务器。然后,客户端只需要连接到自己的本地端口9091,该端口就会透明地转发到服务器的ssh服务器。
这通常会破坏您的公共(public)密钥检查(以及坚持的安全性!),因为客户端的ssh客户端不知道
localhost:9091
与server:22
相同。如果您的客户是Putty,则可以选择在某处提供“真实”服务器名称,以便可以正确查找凭据。