本地机器有公网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) 的工具,该工具应该存在于任何主要发行版的存储库中。
复杂示例
一
Host
节诗,多位主人。Host *.mydom.com * ProxyCommand ssh externalserver nc %h %p
一个 `Hosts` 节,适用于多个用户。
将该节添加
Hosts
到系统/etc/ssh/ssh_config
文件中,以便任何登录到系统的人都可以使用它。
如果网关的 IP 发生变化怎么办
如果您遇到“远程”端系统波动的情况,您可以使用动态 DNS 服务 (DDNS)例如诺伊普。此类服务有几十种,有些是免费的,有些是收费的。
这些服务的基本思想是,它们会为您提供一个静态名称,例如,me.noip.org
然后您在“远程”客户端上运行一个小型守护程序工具。在您的情况下,它可能是网关系统,甚至是远程系统之一。此守护程序将获取当前在互联网上分配的网关 IP,并将其转发到 DDNS 服务,然后该服务会将其列为 的当前 IP me.noip.org
。随着它的变化,它会随着时间的推移而更新。