SSH隧道关闭,但任务仍然有效

时间:2020-03-19 16:50:23

标签: ssh-tunnel

我在过去几个月中都使用了这种隧道配置。
我有一个带调制解调器路由器的远程Raspberry Pi(Raspbian Stretch / Debian),可以通过SSH对其进行访问。
它的公共IP每12小时更改一次。 ISP不允许传入的ssh访问,因此我使用noip服务(此处也是动态IP)创建了到本地Ubuntu的隧道。

在RPi上,我有一个脚本可以每隔几分钟检查隧道是否存在。
当其中一个公共IP更改时,它将关闭,但在几分钟后(noip DUC发送新的本地公共IP和/或远程计算机重新获得Internet连接之后)将对其进行重建

远程检查脚本

COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"

COMMAND_SSH="/usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"

PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")
if [ "$PID" = "" ]
then
        $COMMAND
fi

今天,我正在使用隧道在本地Ubuntu上进行一些工作:
ssh -p 2244 pi@localhost
但是突然我失去了联系,无法恢复。

几周前,我发现我将PiTunnel用作计划B(这非常有用,但是您必须在Terminal Command Shell中使用键盘;暂时不适用于智能手机或平板电脑)
使用piTunnel
ps aux | grep ssh

pi       18301  0.0  0.2   5788  2084 ?        Ss   08:21   0:00 /usr/bin/SCREEN -dmS ssh-Ubuntu /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g

pi       18303  0.0  0.5   9532  4708 pts/0    Ss+  08:21   0:00 /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g

隧道似乎还活着,但是还没有。
如果关闭隧道(肯定是由于IP更改),为什么这些任务没有终止?
我手动杀死了这些任务,然后让隧道检查脚本在crontab中安排的时间对其进行了重新构建。
隧道被重建了。
我必须指出,一年多以前,我使用该隧道配置已有4个月,没有任何问题。

更新1:我在脚本中添加了IP比较(由于刷新了远程公共IP)以重建隧道。

COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"

COMMAND_SSH="/usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"

PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")

IP1=$(wget -qO - icanhazip.com) #present public IP
IP2=$(cat /path-to/ip-old.txt)

if [ "$PID" = "" ]
then
    $COMMAND
else
    if [ "$IP1" != "$IP2" ]
    then
        echo "$IP1" > /path-to/ip-old.txt
        kill "$PID"
        $COMMAND
    fi
fi

这只是一个可行的补丁,但我仍然不知道为什么即使关闭了隧道,ssh-tunnel任务仍保持打开状态。

0 个答案:

没有答案