我的 ISP 不允许我拥有静态 IP 地址。因此,我无法远程 SSH 家用计算机。有没有办法让我从家用计算机 SSH 到服务器,再从远程笔记本电脑 SSH 到服务器并桥接这两个连接?
干杯!
答案1
我只是复制/粘贴(稍微修改)了部分@b_laoshi的回答来自这里:
在这种情况下,您可以配置从 ComputerA 到 ComputerB 的 ssh 隧道,以便隧道反向连接也一样。
建立 ssh 连接 ComputerA -> ComputerB 时,请
-R
按以下方式使用选项:ssh ComputerBUser@ComputerB -R 2222:localhost:22
ComputerBUser
计算机 B 上正在验证的帐户的用户名在哪里?2222
是 ComputerB 上的一个空闲端口。我们将使用此端口来反向隧道从 ComputerB 返回到 ComputerA。现在来自 ComputerB,您可以按照以下方式发出 scp 命令,从 ComputerB 复制文件到 ComputerA,其中
ComputerAUser
ComputerA 上的用户名是:scp -P 2222 /path/to/file/on/ComputerB ComputerAUser@localhost:/path/to/drop/file/on/computerA
或者
ssh -p 2222 ComputerAUser@localhost
这里发生了什么事?
看起来我们只是告诉 ComputerB 将文件发送回它自己,因为我们传递的
localhost
是 ComputerA,而不是 ComputerB。我们实际上是告诉 scp 将文件传递回 ComputerB,但传递到端口 2222。与 ComputerB 上端口 2222 的所有连接都会转发到 ComputerA 上的端口 22(默认 ssh 端口)。因此,通过在现有的 ssh 连接上向后建立隧道,ComputerA 位于 NAT 防火墙后面并不重要。
编辑:
为了允许在不需要活动终端窗口的情况下建立 SSH 隧道,可以添加参数-N
(在 之前-R
)(如@steeldriver 提供的链接中指出的那样)。此外,如果想要自动设置永久的后台 ssh 连接,Erik Torgesta 的很棒的文章为您提供所有必要的步骤。
相关话题:
答案2
也许我已经在自己的服务器上设置了一种更简单的方法。
我让我的服务器每 15 分钟检查一次它的外部 IP 地址(检查间隔时间可通过 cron 自定义)然后将其与其最近的 IP 地址进行比较,如果已更改,它会通过电子邮件向我发送新的 IP 地址。
我现在正在用手机,但如果你愿意的话,可以发送设置,它真的非常简单而且非常可靠,除了当服务器无法访问 IP 检查器时出现的奇怪的虚假电子邮件。
更新 - 这是脚本。显然,您需要一个正常运行的电子邮件帐户,我个人已将我的帐户设置为使用专用的 gmail 帐户发送本指南
#!/bin/sh
IPADDRESS=$(curl https://wtfismyip.com/text)
if [ "$IPADDRESS" != "$(cat /home/will/scripts/.current_ip)" ]
then
dt=$(date)
echo "Your new IP address as of ${dt} is ${IPADDRESS} \r \r FTB" | mail -s "IP address change" [email protected]
echo "$IPADDRESS" >| /home/will/scripts/.current_ip
echo "$dt $IPADDRESS" >> /home/will/scripts/.iphistory
fi
我会从您要存储文件的目录开始touch .current_ip && touch .iphistory
。它还有一个额外的优势,就是可以记录 IP 更改,尽管说实话,我发现它没什么用。
将脚本设置为按您喜欢的频率作为 cron 任务运行。它不会占用太多资源。