![如何从远程站点自动重建损坏的 SSH 会话?](https://linux22.com/image/195536/%E5%A6%82%E4%BD%95%E4%BB%8E%E8%BF%9C%E7%A8%8B%E7%AB%99%E7%82%B9%E8%87%AA%E5%8A%A8%E9%87%8D%E5%BB%BA%E6%8D%9F%E5%9D%8F%E7%9A%84%20SSH%20%E4%BC%9A%E8%AF%9D%EF%BC%9F.png)
我在客户级 NATed GSM 调制解调器后面使用反向 SSH 隧道。这听起来很糟糕,但没关系。我使用以下指令:
ssh -o ServerAliveInterval=60 -f -N -T -R12345:localhost:22 domain.com -i private_key.ppk
会话运行良好。我可以使用隧道并且能够连接我的计算机,尽管由于 CG-NAT 而无法从公共互联网访问它。到现在为止还好。但当连接中断时,我需要一个针对这种情况的解决方案。我怎样才能在远程站点上捕获它?如果我能抓住它,我需要做什么?配置 cron 作业或类似的东西就可以了,但此时我需要社区的帮助。先感谢您。
答案1
感谢 @Cocaine Mitch 给我的灵感,我写了我的第一个 shell 脚本。它检查正在运行的进程,如果列表中缺少 ssh,则说明另一个脚本正在执行。该脚本由 cron 安排,每 20 分钟进行一次检查。 (Cron 作业定义*/20 * * * * * root /root/checkscript.sh
:)
#!/bin/sh
logger "######### ssh_check.sh script is startig."
i=0
logger "Value of initial i = " $i
txt1=$(ps ax | grep "[s]sh -p 22 -o ServerAliveInterval=60 -y -f -N -R12345:localhost:22 mydomain.com")
if [ ! -z "$txt1" ]
then
i=$((i+=1))
fi
logger "Value of txt1 = " $txt1
logger "Value of i = " $i
txt2=$(ps ax | grep "[s]sh -p 22 -o ServerAliveInterval=60 -y -f -N -R12346:localhost:80 mydomain.com")
if [ ! -z "$txt2" ]
then
i=$((i+=1))
fi
logger "Value of the txt2 = " $txt2
logger "Value of i = " $i
if [ $i == 0 ]
then
/root/ssh_tunnel.sh
logger "Given patterns were not found. SSH Tunnel script is starting."
logger "####### ssh_check.sh script log is closing."
else
logger "At least one pattern has been found. Tunnel must be opened."
logger "###### ssh_check.sh script log is closing."
fi
ssh_tunnel.sh脚本的内容
#!bin/sh
ssh -p 22 -o ServerAliveInterval=60 -y -f -N -R12346:localhost:80 mydomain.com
ssh -p 22 -o ServerAliveInterval=60 -y -f -N -R12345:localhost:22 mydomain.com