通过路由器进行 ssh 连接,无需端口转发

通过路由器进行 ssh 连接,无需端口转发

我有一台 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

您可以使用恩格罗克. 流程很简单:

  1. 在他们的网站上注册
  2. 获得https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
  3. 解压 ngrok-stable-linux-amd64.zip
  4. ./ngrok authtoken <来自你的 ngrok 帐户的唯一密钥>
  5. ./ngrok tcp 22
  6. 在远程电脑上你可以像这样连接:
    1. 远程控制[电子邮件保护]-p 11000

答案3

这个答案基于已接受的答案,但添加了允许我完成它的细节。我为平淡无奇的解释道歉,因为这根本不是我的专长。

假设您有两台计算机,AB。您想sshAB,但您无法在连接到它们的路由器上进行任何端口转发。

正如接受的答案所述,您需要一个服务器S来执行此操作:在计算机中B,您将允许ssh来自的连接S;并且从计算机A,您将访问该隧道以S到达B

但是你如何获得该服务器S?我发现serveo(链接:https://serveo.net/)。它使用起来非常简单。您无需安装任何东西或注册,而且它是免费的。根据网站介绍,操作步骤如下:

  1. 想一个计算机的别名B。例如,computer_B_alias

  2. 在计算机中B,执行ssh -R computer_B_alias:22:localhost:22 serveo.net

  3. 现在,您可以通过在计算机中执行以下操作B从计算机访问计算机:,其中您必须用计算机中的用户名称替换。AAssh -J serveo.net user@computer_B_aliasuserB

PS:当然,你可以在启动计算机时将第2点设为自动任务B

PSS:在尝试此操作之前,请确保ssh两台计算机都安装了。对于 Ubuntu,sudo apt-get install ssh就可以了。

答案4

回答花了很长时间。希望它能够帮助那些正在寻找同样问题的人。

如果您想访问 NAT 后面的服务器,但又不想编写代码,您可以选择下面的工具并使用适合您需要的工具。

上述两种工具都假定您可以访问 Linux 机器来安装其客户端。它们的部分优点如下:

  • 两者都允许你使用 Web 界面访问终端
  • 您不需要自己的中间反向 ssh 主机。
  • 非常容易安装
  • 两者都是开源的

我个人更喜欢 tmate,因为你可以主持好友服务器在您自己的中间服务器上(用于反向 ssh),而 teleconsole 只能连接到他们自己的服务器进行反向 ssh。

相关内容