我该如何通过NAT路由器背后的某人(如老太婆)通过SSH?


14

为了快速帮助他人,SSH非常有用,特别是与GNU Screen结合使用时。用户通常位于NAT路由器后面。即使用户可以配置路由器,也需要花费一些时间来记住密码,找到正确的选项等。

那么,如果其他人位于NAT路由器后面,通过SSH帮助他们的最简单方法是什么?

我目前告诉人们打开一个终端,运行以下命令,并从http://ip.appspot.com/等网站向我传递其IP :

sudo apt-get install openssh-server ssh-import-id && ssh-import-id lekensteyn

显然,如果它们位于NAT路由器后面或配置了个人防火墙,则此方法将无法正常工作。所以,有什么类似的东西:

sshd --accept-help-from lekensteyn

我不是在寻找像Teamviewer这样的替代品,而只是在寻找像SSH这样的外壳。它也应该是开源的。

Answers:


13

如果您自己的计算机可以接受SSH连接,则有一种方法可以使用Pavlos G.链接到技术,而无需额外的计算机。

您首先需要一个特权用户,您的朋友将通过以下方式连接:

sudo adduser reverse --shell /bin/false

告诉你的朋友开始隧道:

ssh -N -R 62222:localhost:22 reverse@lekensteyns-server

然后,在您自己的计算机(lekensteyns-server)上,开始反向连接:

ssh -p 62222 localhost

*我对安全性了解不足,无法为创建适当的弱势用户提供建议。那可能是一个单独的问题应该涵盖的内容。


3
看起来很有希望,我问了一个有关受限用户部分
Lekensteyn 2011年

2

根据您的特定需求,我可能会:

  1. 请他们告诉我路由器的密码
  2. 仅登录和设置端口22的端口转发
  3. 通过SSH(如果需要打开额外的端口,则通过SSH隧道)连接并完成工作。

我也忘记了您可以尝试反向ssh隧道,尽管该解决方案在技术上需要更多的中间计算机才能工作。

更多信息可以在这里找到


1)可能无法正常工作,因为公众经常禁止访问路由器。
Lekensteyn 2011年

2

如果他们还没有IPv6,我通常只是建立一个IPv6隧道(来自sixxs.net或he.net),然后通过这种方式计算机具有一个静态地址,而我不必弄乱NAT。我还喜欢设置基于密钥的身份验证(这样,他们不必告诉您他们的密码)。

Sixxs有您自己使用的客户端。它可以在几乎所有NAT之后运行,并在IPv4地址更改时自动更新。他们有关于如何设置它的说明,它是为Ubuntu打包的。

飓风电气使用隧道,IPv6数据包作为IPv4数据包的有效负载发送。与Sixxs不同,不使用TCP / UDP。这意味着您后面的NAT必须支持转发PROTOCOL 41(而不是端口),并且NAT后面只有一台计算机可以使用它。Ubuntu中内置了使用这种隧道的软件。

对于HE,我在中使用类似以下内容/etc/network/interfaces

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     endpoint 216.218.226.238
     address  2001:470:a29f::2
     netmask  64
     ttl 64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

您需要做的另一件事是更新隧道端点。由于您不知道外部IP何时更改,因此您仅需尝试每隔几分钟就更新一次端点。您可以使用类似的东西,然后从cron运行它:

#!/bin/sh
echo -n "Hurricane Electric Proto-41 tunnel endpoint update: "
#(C) 2010 Erik B. Andersen This script is licensed under the latest version of the
# AGPL published by the Free Software Foundation at http://www.gnu.org/licenses/ .
####Set these for each different site#########
pass="passwordhere"
user_id="a765b8e2f474667dcb56e08c5f1aa05b"
tunnel_id="97817"
####Past here doesn't need to be changed######
wget -4 "https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$(echo -n "${pass}" | md5sum | grep -o -E "[0-9a-fA-F]{32}")&user_id=${user_id}&tunnel_id=${tunnel_id}" -O /dev/null -o /dev/null --no-check-certificate
echo " Done"

1
为了正确建立这样的隧道需要做些什么?这种连接当然是基于密钥的,这就是为什么我使用ssh-import-id
Lekensteyn

确实,我很想学习更多有关此技巧的信息。
拉斐尔·西拉克(RafałCieślak)2012年

0

多年以来,我开发了一个GUI来完全执行OP的要求……除了Pavlos所建议的那样,它要求通过ssh访问具有公共IP的第三台服务器。您可以在这里找到debian软件包和说明:

http://pietrobattiston.it/reachme

请注意,它仍然无法进行初始配置-也就是说,您必须为无密码连接设置rsa密钥。设置完成后,“ reachthem”使您可以查看是否已连接“ reachme”,并可以打开ssh shell /浏览文件系统/查看屏幕(实验性的)。

显然,如果计算机本身具有公共IP,则不需要第三台计算机,就像ændrük的回答一样。显然,GUI的好处是远程用户不必在终端中输入任何命令...但是,如果远程用户必须安装reachme,则部分损失了这一利益。因此,我总是向安装Ubuntu的每个人安装和设置reachme。

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.