我目前正在尝试研究如何SSH到防火墙后面的服务器,拒绝所有传入的连接 . 服务器可以SSH出来,所以我想知道是否有办法让防火墙后面的服务器创建到我的工作站的SSH隧道,然后允许我的工作站通过它发送命令回服务器?
我已经研究过隧道/反向隧道,但这些似乎是端口转发解决方案,由于防火墙拒绝所有端口上的所有连接,因此无法正常工作 .
理想情况下,我想在Ruby(使用Net :: SSH gem)中执行此操作,以便不要像以下那样打开新连接:
Net::SSH.start('host', 'user', :password => "password")
我可以以某种方式绑定到现有的隧道 .
谢谢!
2 回答
如果您可以控制服务器,这非常简单 . 我将提供命令行版本,您可以将其用于任何您喜欢的框架:
服务器首先 Build 与客户端的连接,该连接开始在端口9091(我刚刚编写的东西)上监听"R"表情端(即客户端),然后将这些连接转发到
localhost:22
,即转发给自身的ssh服务器 .然后客户端只需要连接到自己的本地端口9091,该端口透明地转发到服务器的ssh服务器 .
这通常会对您的公钥检查(以及附加的安全性!)造成严重破坏,因为客户端's ssh client doesn'知道
localhost:9091
与server:22
相同 . 如果您的客户端是Putty,那么您可以选择在某处提供"real"服务器名称,以便可以正确查找凭据 .除非您可以从主机创建(并维护)一个隧道,而您首先尝试连接(这将允许您通过该隧道连接),否则您不能 . 这就是防火墙:防止未经授权访问网络 .
但是防火墙不应该管理 . 使用ssh's tunneling features设置的端口转发隧道会破坏防火墙 . 但是,它也可能使您遇到远程网络管理员的麻烦 .
因此,最终,您需要与网络管理员联系,以便放宽防火墙规则,以便无需隧道,或至少获得隧道授权 .