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

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

本地机器有公网IP。

远程机器正在客户站点运行。我拥有这台机器的完全访问权限,但它没有公共 IP。目前,我们正在使用 TeamViewer 远程访问这台机器,但我们更愿意使用基于 x11vnc 的解决方案。

是否存在某种可以在远程机器上运行的守护进程或软件,以便当它启动时,我可以通过 ssh 进入它(也许通过隧道?)。

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

答案1

下面的解决方案将按如下方式工作:

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

您可以通过 ssh 的ProxyCommand功能来执行此操作。将以下内容添加到您的$HOME/.ssh/config文件中。如果该文件不存在,请仅使用以下内容创建它:

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

就此功能而言,这只是冰山一角。请查看标题为“U&L 问答”的以下内容:通过中间服务器的 SSH 隧道-如何一步连接(使用密钥对)?, 更多细节。

笔记:上述方法利用了一个名为nc(netcat) 的工具,该工具应该存在于任何主要发行版的存储库中。

复杂示例

  1. Host节诗,多位主人。

    Host *.mydom.com *
        ProxyCommand ssh externalserver nc %h %p
    
  2. 一个 `Hosts` 节,适用于多个用户。

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

如果网关的 IP 发生变化怎么办

如果您遇到“远程”端系统波动的情况,您可以使用动态 DNS 服务 (DDNS)例如诺伊普。此类服务有几十种,有些是免费的,有些是收费的。

这些服务的基本思想是,它们会为您提供一个静态名称,例如,me.noip.org然后您在“远程”客户端上运行一个小型守护程序工具。在您的情况下,它可能是网关系统,甚至是远程系统之一。此守护程序将获取当前在互联网上分配的网关 IP,并将其转发到 DDNS 服务,然后该服务会将其列为 的当前 IP me.noip.org。随着它的变化,它会随着时间的推移而更新。

相关内容