如何配置以便我始终可以通过 Internet 使用动态 IP 通过 SSH 连接到我的系统?

use*_*274 11 networking ssh

基本上我希望能够做一些像teamviewer这样的事情,无论网络配置是什么,只要我的ssh服务器(机器A)和ssh客户端(机器B)都可以访问互联网(和一些第三服务器,机器C) ),我可以获得访问权限 - 这样做的原因是我希望能够移动机器 A,将其插入电源,让它自动连接到几个预配置的 wifi 网络之一(每个网络都是独一无二的/不同的) , 无需在网络上配置端口转发或类似配置,并且能够从机器 B 通过互联网登录

我怎样才能做到这一点?我不介意在带有静态 IP 地址的服务器上设置一些东西来帮助握手,但我也不介意 3rd 方服务器,如果已经存在的话(就像说 teamviewer 那样)

为清楚起见编辑:我有 3 台机器,AB 和 C

A 是一个无头树莓派,它将在随机位置打开/关闭,连接到预先配置的 wifi 网络

B 是我想要连接的带有适当显示器、键盘等的机器

C 是租用的 AWS 服务器,我有一个静态 IP 地址,可以从 B 可靠地通过 SSH 连接,并且可以安装任何必要的东西来帮助 B 连接到 A

Ant*_*hon 11

由于您在互联网上拥有机器 C,因此在那里创建一个名为 的特殊帐户sesame,然后在 A 上创建一个带有公钥/私钥的帐户,您已将公钥从中复制到sesameC上的帐户。

您现在可以从 A 登录到 C,但您不要这样做:

ssh -N -R 19930:localhost:22 sesame@yourserverC
Run Code Online (Sandbox Code Playgroud)

(您可能希望将此与 sleep 语句或例如 10 秒结合起来,并将其包装在无限循环中,以便在 WiFi 关闭导致连接中断时重新建立连接)

从机器 B,通常登录到您在 C 上拥有的任何帐户(可以是但不必是该sesame帐户,我使用的是不同的帐户)。一旦你在 C 上,使用以下命令登录到 A:

ssh localhost -p 19930
Run Code Online (Sandbox Code Playgroud)

您当然可以使用与 19930 不同的数字。

如果 A 上的私钥不受密码保护,则可以运行ssh -N -R ...from /etc/rc.local。在这种情况下,请确保创建sesame一个功能有限的单独帐户,以便当您的机器 A 受到威胁/被盗时,您的服务器 C 的风险是有限的。这也是为什么我建议使用单独的帐户从 B 到 C 的原因。

您实际上可以将sesamein的登录 shell 设置/etc/passwd/bin/false,因此您不能再使用该帐户进行登录。


gar*_*Red 7

在您的 Raspberry Pi 上安装 IPv6 隧道(例如Sixxs)。您现在将拥有一个永久静态 IPv6 地址,只要您的 Pi 在线,该地址就会在线。确保您保护您的 Pi,因为它现在已与世界相连。

如果您的 B 连接到 IPv6 网络,则直接连接到 Pi。如果 B 未连接到 IPv6 网络,请使用 C 作为跳转服务器,您可以在其中通过 IPv4 连接到 C,然后通过 IPv6 从 C 连接到您的 Pi。