SSH:本地服务器具有公共IP; 远程不

本地机器具有公共IP。

远程计算机正在客户端运行。 我有充分的机会,但它没有一个公共的IP。 目前我们正在使用TeamViewer远程访问这台机器,但我们宁愿使用基于x11vnc的解决scheme。

是否有某种守护程序或软件可以在远程机器上运行,以便在启动时可以通过SSH(也许是通过隧道?)。

(123.45.6.78) local .-,( ),-. __ _ .-( )-. Remote [__]|=| ---->( internet )-------> __________ ------> ____ __ /::/|_| '-( ).-' [_...__...°] | | |==| '-.( ).-' |____| | | /::::/ |__| 

以下解决scheme的工作如下:

  Local .-,( ),-. __ _ .-( )-. Gateway RemoteX [__]|=| ---->( internet )-------> __________ ------> ____ __ /::/|_| '-( ).-' [_...__...°] | | |==| '-.( ).-' |____| | | /::::/ |__| 

你可以通过ssh的ProxyCommand工具来做到这一点。 将以下内容添加到您的$HOME/.ssh/config文件中。 创build它,如果它不存在与这个内容:

 Host RemoteX User userint ProxyCommand ssh userext@Gateway nc RemoteX %p Host RemoteY User userint ProxyCommand ssh userext@Gateway nc RemoteY %p 

然后连接到不同的内部远程服务器,如下所示:

 $ ssh RemoteX -or- $ ssh RemoteY 

就这个特性而言,这是冰山一angular。 查看标题为: 通过中间人服务器的SSH隧道 – 如何一步连接(使用密钥对)? , 更多细节。

注意:上面的方法正在使用一个叫做nc (netcat)的工具,它应该在任何主要的发行版本库中。

复杂的例子

  1. 一个Host节,许多主机。

     Host *.mydom.com * ProxyCommand ssh externalserver nc %h %p 
  2. 一个主持节,为许多用户。

    Hosts节添加到系统的/etc/ssh/ssh_config文件中,以便任何login到该框的人都可以使用它。

如果网关的IP改变,该怎么办?

如果您遇到“远端”系统波动的情况,您可以使用dynamicDNS服务(DDNS) ,如noip 。 这些服务有十几种,有的是免费的,有的是有偿的。

这些服务的基本思想是,他们会给你一个静态的名字,比如me.noip.org并在“远程”客户端上运行一个小的守护进程工具。 在你的情况下,它可能是网关系统,甚至是远程系统之一。 这个守护进程将获得当前在互联网上分配的网关的IP,并将其中继到DDNS服务,然后将其列为me.noip.org的当前IP。 随着它的变化,它会随着时间的推移而更新。