2012-01-10 124 views
14

我目前正在尝试解决如何SSH到拒绝所有传入连接的防火墙后面的服务器。服务器可以SSH连接,所以我想知道是否有办法让防火墙后面的服务器创建到我的工作站的SSH隧道,然后允许我的工作站通过它向服务器发送命令?SSH到服务器后面的防火墙

我已经研究了隧道/反向隧道,但这些似乎是端口转发解决方案,由于防火墙拒绝所有端口上的所有连接,因此这些解决方案无法正常工作。

理想情况下,我想这样做的红宝石(使用Net :: SSH宝石),这样的而不是打开像一个新的连接:

Net::SSH.start('host', 'user', :password => "password") 

我能以某种方式绑定到现有的隧道。

谢谢!

回答

25

如果您有对服务器的控制权,这相当简单。我给的命令行版本,您可以和他们说成你喜欢的任何框架:

server$ ssh -R 9091:localhost:22 client.example.egg 

client$ ssh -p 9091 localhost 

服务器建立到客户端首先它开始于“R”表情端侦听连接(即客户端)在端口9091上(我刚刚创建的),并将这些连接转发到localhost:22,即转发到ssh服务器本身。

客户端只需要连接到自己的本地端口9091,它透明地转发到服务器的ssh服务器。

这通常会严重破坏您的公钥检查(和贴心的安全!),因为客户端的SSH客户端不知道localhost:9091server:22相同。如果您的客户端是Putty,那么您可以选择在某处提供“真实”服务器名称,以便可以正确查找凭据。

+0

有没有一种方法可以通配符localhost身材。我的IP地址发生变化,我希望始终能够ssh到服务器。我有一个dns解析器已经设置了 – MichaelH 2013-05-06 11:12:23

+0

@MichaelH:我不确定我是否理解。如果其中一个对等体的IP地址发生变化,您将无法维护TCP连接... – 2013-05-06 11:49:34

+0

我们是否可以通过此隧道连接http? – Will 2014-02-04 01:35:31

0

除非您可以从首先尝试连接的主机创建(并维护)一条隧道(这将允许您通过该隧道进行连接),否则不行。这就是防火墙的要点:防止未经授权的访问网络。

但是防火墙不应该阻塞隧道,尽管它完全取决于隧道的管理方式。使用ssh's tunneling features设置的端口转发隧道将颠覆防火墙。但是,它也可能让您遇到远程网络管理员的麻烦。因此,最终,您需要与网络管理员交谈,以便放宽防火墙规则,以便无需隧道或至少获得隧道授权。

相关问题