通过路由器ssh而不进行端口转发


11

我有一个Linux服务器,我想将其放在路由器后面的家庭网络中。我有时需要从外部ssh到该服务器,但是我不想设置端口转发,因为我无权访问路由器,而且我也不知道路由器的IP。

我可以做的是在Linux服务器中放置一些程序,因此当它连接到Internet时,它将不断地将数据在线发送到我的其他服务器,因此我知道它的IP地址。但是,是否有一种方法可以从外部SSH到路由器后面的服务器?诸如NAT或保持网络连接的套接字之类的东西?

非常感谢

Answers:


24

您想要做的就是将“ 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,您将能够在端口8022上SSH到localhost,并将您的流量转发到linux_server上other带的linux_server-> my_other_server隧道说明 [user@linux_server]$ ssh -p8022 localhost
:在端口8022上连接到我自己,该端口转发到linux_server

如果您在最初的linux_server-> my_other_server隧道丢失时遇到问题,则可以制作一个脚本来使其保持打开状态,调整keepalive设置或使用autossh。


1
谢谢,效果很好!我想使用脚本保持打开状态。另一个问题是,如果我有1000个这样的“ linux服务器”而只有一个“ my_other_server”,我可以用这种方式对任何一个ssh进行加密吗?我认为它们都需要不同的端口,是否有更好的方法呢?
揭超李

好吧,这取决于。现在您已经在linux_server上,您可以从那里SSH到linux_server2和linux_server3吗?那将是最简单的。因此,是的,您可以多次执行此操作,而不是使用8022,而要使用8023、8024。如果按照该路线进行操作,请在“ my_other_server”上构建一个包含所有端口号的〜/ .ssh / config文件,因此您只需ssh [alias]而不是ssh [port] localhost。那将变得很麻烦。
MattPark

1
是否可以仅用两台机器进行设置?将B连接到A,将A通过自身连接回B?
adamyonk

1
我刚刚做完。可以确认它是否有效。\ o /
adamyonk 16/09/29

是的---很明显,您知道了。您可以使用类似的方法 autossh使其保持打开状态。
MattPark '16

3

您可以使用各种VPN来使其正常工作,但是这将需要您拥有一台无法访问的服务器可以访问的服务器。然后,您可以在服务器,您的PC和防火墙服务器上设置OpenVPN,启用client-to-client,就可以完成。http://openvpn.net/howto.html


谢谢。我正在研究这个问题,但似乎有些复杂。如果我理解正确,则需要在两台服务器上都安装OpenVPN,这样它们就可以在不配置路由器的情况下进行通信,对吗?
揭超李

究竟。将服务器配置为“服务器”,然后将要连接的两个客户端配置为“客户端”。不过,上述反向SSH似乎对您来说更容易。
内森·C

2

该答案基于已接受的答案,但添加了使我能够完成的详细信息。对于行人的解释,我深表歉意,因为这并不是我的专长。

假设您有两台计算机,A并且B。您想要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. 现在,您可以通过在computer :中执行以下操作来B从计算机访问计算机:,您必须A在computer 中用用户名替换。Assh -J serveo.net user@computer_B_aliasuserB

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

PSS:在尝试此之前,请确保ssh两台计算机上均已安装该产品。对于Ubuntu,sudo apt-get install ssh可以胜任。


1

回答时间很长。希望它可以对现在正在寻找的人有所帮助。

如果您想访问NAT后面的服务器并且不想编写代码,则可以在下面找到一个工具,然后使用适合您需要的任何工具。

以上两个工具都假定您可以访问linux计算机以安装其客户端,其中一些好处包括:

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

我个人更喜欢tmate,因为您可以将tmate服务器托管在自己的中间服务器上(用于反向ssh),而远程控制台只能连接到其自己的服务器以用于反向ssh。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.