使用传出 SSH 接收传入 SSH

使用传出 SSH 接收传入 SSH

我的 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 任务运行。它不会占用太多资源。

相关内容