如何从远程站点自动重建损坏的 SSH 会话?

如何从远程站点自动重建损坏的 SSH 会话?

我在客户级 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

相关内容