我怎样才能通过 SSH 帮助位于 NAT 路由器后面的某人(例如奶奶)?

我怎样才能通过 SSH 帮助位于 NAT 路由器后面的某人(例如奶奶)?

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

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

我现在告诉人们打开终端运行以下命令,并从类似这样的网站将他们的 IP 传递给我http://ip.appspot.com/

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

显然,如果他们位于 NAT 路由器后面或配置了个人防火墙,这将不起作用。那么,有没有类似的东西:

sshd --accept-help-from lekensteyn

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

答案1

如果你自己的计算机可以接受 SSH 连接,则可以使用Pavlos G. 链接的技术无需额外的计算机。

首先,您需要一个权限较低的*用户,您的朋友将以此身份进行连接:

sudo adduser reverse --shell /bin/false

告诉你的朋友启动隧道:

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

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

ssh -p 62222 localhost

* 我对安全性了解不够,无法就创建适当的低权限用户提供建议。这可能应该在单独的问题中讨论。

答案2

根据您的具体需求,我可能会:

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

我还忘了你可以尝试反向 SSH 隧道,尽管从技术上来说,这个解决方案需要多一台中间计算机才能工作。

更多信息请见这里

答案3

如果他们还没有 IPv6,我通常会设置一个 IPv6 隧道(来自 sixxs.net 或 he.net),这样计算机就有了一个静态地址,我就不必处理 NAT。我还喜欢设置基于密钥的身份验证(这样他们就不必告诉你他们的密码了)。

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

Hurricane Electric 使用隧道,其中 IPv6 包作为 IPv4 数据包的有效负载发送。与 Sixxs 不同,它不使用 TCP/UDP。这意味着您身后的 NAT 必须支持转发协议 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"

答案4

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

http://pietrobattiston.it/reachme

请注意,它(仍然)无法处理初始配置 - 即,您必须自己设置无密码连接的 rsa 密钥。设置完成后,“reachthem”允许您查看“reachme”是否已连接,并打开 ssh shell/浏览文件系统/查看屏幕(实验性)。

显然,如果您的计算机本身具有公共 IP,则不需要第三台计算机,如 ændrük 的回答中所述。显然,GUI 的好处是远程用户不必在终端中输入任何命令……但如果远程用户必须安装 reachme,则部分好处就会丧失。所以我总是为我安装 Ubuntu 的每个人安装和设置 reachme。

相关内容