我在过去几个月中都使用了这种隧道配置。
我有一个带调制解调器路由器的远程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任务仍保持打开状态。