我有一台 Linux 服务器,我想把它放在路由器后面的家庭网络中。有时我需要从外部通过 ssh 连接到这台服务器,但我不想设置端口转发,因为我无法访问路由器,也不知道路由器的 IP。
我能做的就是在 Linux 服务器上放置一些程序,这样当它连接到互联网时,它就会不断向我的其他在线服务器发送数据,这样我就能知道它的 IP 地址。但是有没有办法从外部通过 ssh 连接到路由器后面的服务器?像 NAT 或套接字这样可以保持网络连接的东西?
多谢
答案1
您想要做的是从您的“linux 服务器”通过 ssh 连接到外部的某个服务器,例如“my_other_server”或者两台服务器都可以访问的其他服务器。
您将使用 ssh 远程端口转发。
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
解释:连接到 my_other_server 并在那里打开端口 8022,它将在端口 22 上转发回我。
从 my_other_server.com,你将能够通过 ssh 连接到本地主机的 8022 端口,并将你的流量转发到 linux_server,通过 linux_server -> my_other_server 隧道进行搭载。
[user@linux_server]$ ssh -p8022 localhost
解释:连接到我自己的 8022 端口,然后转发到 linux_server
如果您在初始 linux_server -> my_other_server 隧道断开时遇到问题,您可以编写一个脚本来保持其保持打开状态,调整 keepalive 设置,或者使用 autossh。
答案2
您可以使用恩格罗克. 流程很简单:
- 在他们的网站上注册
- 获得https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
- 解压 ngrok-stable-linux-amd64.zip
- ./ngrok authtoken <来自你的 ngrok 帐户的唯一密钥>
- ./ngrok tcp 22
- 在远程电脑上你可以像这样连接:
- 远程控制[电子邮件保护]-p 11000
答案3
这个答案基于已接受的答案,但添加了允许我完成它的细节。我为平淡无奇的解释道歉,因为这根本不是我的专长。
假设您有两台计算机,A
和B
。您想ssh
从A
到B
,但您无法在连接到它们的路由器上进行任何端口转发。
正如接受的答案所述,您需要一个服务器S
来执行此操作:在计算机中B
,您将允许ssh
来自的连接S
;并且从计算机A
,您将访问该隧道以S
到达B
。
但是你如何获得该服务器S
?我发现serveo
(链接:https://serveo.net/)。它使用起来非常简单。您无需安装任何东西或注册,而且它是免费的。根据网站介绍,操作步骤如下:
想一个计算机的别名
B
。例如,computer_B_alias
。在计算机中
B
,执行ssh -R computer_B_alias:22:localhost:22 serveo.net
。现在,您可以通过在计算机中执行以下操作
B
从计算机访问计算机:,其中您必须用计算机中的用户名称替换。A
A
ssh -J serveo.net user@computer_B_alias
user
B
PS:当然,你可以在启动计算机时将第2点设为自动任务B
。
PSS:在尝试此操作之前,请确保ssh
两台计算机都安装了。对于 Ubuntu,sudo apt-get install ssh
就可以了。