如何配置以便始终可以在动态IP上通过Internet SSH到系统?


11

基本上,我希望能够像teamviewer一样进行操作,无论网络配置是什么,只要我的ssh服务器(机器A)和ssh客户端(机器B)都可以访问互联网(某些第三台服务器,机器C) ),我可以访问-原因是我希望能够移动机器A,将其插入电源,使其自动连接到几个预先配置的wifi网络之一(每个都是唯一的/不同的) ,而无需在网络上配置端口转发或类似功能,并且能够通过Internet从Machine B登录到该端口

我该怎么做?我不介意在具有静态IP地址的服务器上设置某些内容来帮助进行握手,但是如果存在的话,我也不介意使用第三方服务器(例如teamviewer所做的事情)

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

A是无头覆盆子pi,将在随机位置打开/关闭电源,并连接到预先配置的wifi网络

B是我要从其连接的具有适当显示器,键盘等的机器

C是我租用的一个具有静态IP地址的AWS服务器,可以从B可靠地SSH插入,并且可以安装帮助B连接到A所需的任何内容


您可以SSH到第三台计算机吗?
Anthon 2015年

@Anthon我认为是这样,我将它们重命名为AB和C,并为它们添加了描述,希望可以将其清除
user2813274

咳嗽no-ip.com咳嗽
约书亚

1
如果您所在位置的外围防火墙不允许回程,no-ip.com将无济于事!
bobstro

我曾经ssh非常简短地使用隧道。我什至不能让他们熬夜autossh。如果上行链路由于某种原因掉线,则必须始终手动重启它们。最终,我使用OpenVPN为自己建立了一个小型VPN,它做得很好。
Blacklight Shining 2015年

Answers:


11

当您在互联网上拥有计算机C时,在此处创建一个名为的特殊帐户sesame,在A上创建一个具有公钥/私钥的帐户,您已从该sesame帐户复制了公钥到C 上的帐户。

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

ssh -N -R 19930:localhost:22 sesame@yourserverC

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

通常从计算机B登录到您在C上拥有的任何帐户(可以但不一定是该sesame帐户,我使用的是其他帐户)。一旦进入C,使用以下命令登录到A:

ssh localhost -p 19930

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

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

实际上,你可以设置登录shell sesame/etc/passwd/bin/false,这样你就可以不再使用该帐户登录。


此解决方案与使用TeamViewer有所不同,那里的服务器用于打开端口,然后将其重定向以直接通信。就像BitTorrent之类的程序在找到要下载的机器后直接进行通信(也无需事先打开端口)。
Anthon

因此,主要区别在于,所有流量都通过服务器C,而C仅用于建立链接,然后不用于其余的连接-我可以。就安全性而言,您确实有一个好处,除了最低限度的登录要求之外,我是否还需要做其他特别的事情来使芝麻无法在C上做任何事情?(RHEL系统)
user2813274

1
@ user2813274实际上,在这种情况下,所有流量都经过C(这将使BitTorrent失去用处)。我不确定您可以将sesame帐户限制为C 多远,可能是可以使它/bin/false作为登录外壳运行(因为ssh从未真正登录),或者通过command=~/.ssh/authorized_keys
Anthon中

@ user2813274如果您还没有尝试过:如果您有用于设置反向代理的特殊帐户,则可以通过将登录shell更改为禁用对该帐户的登录/bin/false
Anthon

1
@ user2813274是的,我尝试了一下,这将使我设置反向隧道(您当然需要其他帐户才能进入服务器C来进行ssh localhost -p portnum
Anthon

7

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

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


我喜欢它,因为如果网络支持IPV6,它甚至不需要C,但是我将不得不尝试一下-防火墙默认会阻止它吗?
user2813274

1
Sixxs提供了多种隧道IPv6协议。如果您使用任何内容(AYIYA),则需要从Pi到Internet打开的TCP端口3874和UDP端口5072。在家庭网络上,应该没问题;公司或校园网络可能有所不同。
garethTheRed

安装隧道听起来是可行的,但似乎我必须注册Sixxs服务,等待它们使用IP地址返回我,等等。-不再那么简单-仍然是一个不错的解决方案,但我不要以为这是我现在要走的路。
user2813274

1

也看看这个:

使用的技术与接受的答案中描述的技术相同,但是它使用一些脚本来使事情自动化并使解决方案更通用。它还将整个配置放在Docker容器内,以便在发生某些问题时主系统是安全的。

但是,它不提供从A到C的自动连接,必须手动启动。也许您可以对解决方案进行一些自定义,以使其完全满足您的要求。


0

也许您需要使用除ssh或Tunneling概念之外的其他内容。.我建议您使用诸如whatsapp或电报之类的消息传递概念。

Telegram具有telegram-cli客户端,您可以对其进行修改以接受并执行某些命令并在raspi中实现它。

如果您使用Telegram,则可以简化您的网络并至少减少C机器来做集线器,因为C服务器已替换为Telegram消息传递服务器。.Telegram已经随iphone和android客户端一起提供,所以我认为您不需要B机器也可以,如果需要,可以为特定的操作系统安装电报客户端。电报消息被标记。他们将先ddos电报服务器。

因此,只要您的raspi可以连接到电报服务器(只需将raspi连接到互联网),即使raspi处于防火墙/代理/专用IP /动态IP的后面,您也可以始终进行远程操作。

有了这个概念,您可以随时随地进行远程操作。


笏。那是不安全的,您信任某些随机消息传递应用程序,您是说OP应该修改该随机消息传递应用程序以使其正常工作。这甚至还没有意识到,随机消息传递应用程序将完全被vim之类的东西破坏并具有可怕的延迟。
另一个用户

好吧,如果你使用它只是发送命令,我认为其确定..如果你用它来像vim的,我不认为它的好..好的建议..我将修改我的答案
Wicaksono Trihatmaja

我想这不是我想要的,我想要完整的外壳程序访问权限,不外乎什么,就DOS而言,就我而言,我并不担心,首先是因为我必须进行特殊设置才能甚至自己连接到它,第二,因为它的连接将是间歇性的,并且无论如何都会随机更改
user2813274

0

我认为您应该看看反向ssh端口转发。简而言之,首先使用以下语法从A到C发起ssh,然后使用该端口从C隧道回A。这样做时,您将不会进入A的家庭防火墙,因为R-Pi已经具有一条隧道。

ssh -R 2210:localhost:22 myCoolAwsSite.com

执行此操作时,请考虑安全影响。您可以添加一些cron柔术,以便在重启后重新建立连接。


呃...这和安东的答案有什么不同?
user2813274 2015年
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.