Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSH到防火墙后面的服务器_Ssh_Tunneling - Fatal编程技术网

SSH到防火墙后面的服务器

SSH到防火墙后面的服务器,ssh,tunneling,Ssh,Tunneling,我目前正在尝试解决如何通过SSH连接到防火墙后面拒绝所有传入连接的服务器。服务器可以通过SSH连接,所以我想知道是否有办法让服务器在防火墙后面创建一个到我的工作站的SSH隧道,然后允许我的工作站通过它将命令发送回服务器 我已经研究过隧道/反向隧道,但这些似乎是端口转发解决方案,因为防火墙拒绝所有端口上的所有连接,所以无法工作 理想情况下,我希望在Ruby中这样做(使用Net::SSH gem),这样就不用打开一个新连接,如: Net::SSH.start('host', 'user', :pas

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

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

理想情况下,我希望在Ruby中这样做(使用Net::SSH gem),这样就不用打开一个新连接,如:

Net::SSH.start('host', 'user', :password => "password")
我可以通过某种方式绑定到现有的隧道

谢谢

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

然而,防火墙不应该阻止隧道,尽管这完全取决于隧道的管理方式。使用设置的端口转发隧道将破坏防火墙。但是,这也可能会给远程网络的管理员带来麻烦


因此,最终,您需要与网络管理员沟通,放松防火墙规则,以便在不需要隧道的情况下进行操作,或者至少获得拥有隧道的授权。

如果您可以控制服务器,这是相当简单的。我将给出命令行版本,您可以将其应用到您喜欢的任何框架中:

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

client$ ssh -p 9091 localhost
服务器首先建立到客户端的连接,客户端开始监听端口9091(我刚刚编的)上的“R”emote端(即客户端),然后将这些连接转发到
localhost:22
,即转发到自身上的ssh服务器

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


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

是否有一种方法可以通配符该localhost数字。我的IP地址会更改,并且我希望始终能够通过ssh连接到服务器。我已经设置了dns解析程序up@MichaelH当前位置我不确定我是否理解。如果其中一个对等方的IP地址发生更改,您将无法维护TCP连接…我们也可以通过此隧道传输http吗?@Will:当然,您可以通过隧道传输特定的TCP端口,或者您可以创建一个SOCKS代理来隧道任何TCP连接(选项
-D
)。