원격 사이트에서 손상된 SSH 세션을 자동으로 다시 빌드하는 방법은 무엇입니까?

원격 사이트에서 손상된 SSH 세션을 자동으로 다시 빌드하는 방법은 무엇입니까?

클라이언트 측 NAT GSM 모뎀 뒤에서 역방향 SSH 터널링을 사용하고 있습니다. 끔찍하게 들리지만 괜찮습니다. 나는 다음 지시문을 사용합니다.

ssh -o ServerAliveInterval=60 -f -N -T -R12345:localhost:22 domain.com -i private_key.ppk

세션이 잘 진행되고 있습니다. CG-NAT으로 인해 공용 인터넷에서는 액세스할 수 없지만 터널을 사용하여 컴퓨터에 연결할 수 있습니다. 여태까지는 그런대로 잘됐다. 그런데 연결이 끊겼을 때 이런 상황에 대한 해결책이 필요합니다. 원격지에서 어떻게 캡쳐하나요? 잡을 수 있다면 어떻게 해야 할까요? cron 작업이나 이와 유사한 작업을 구성하는 것은 괜찮지만 지금은 커뮤니티의 도움이 필요합니다. 미리 감사드립니다.

답변1

영감을 주신 @Cocaine Mitch에게 감사드리며 첫 번째 쉘 스크립트를 작성했습니다. 실행 중인 프로세스를 확인하고 목록에 ssh가 없으면 다른 스크립트가 실행되고 있는 것입니다. 스크립트는 cron에 의해 예약되며 20분마다 확인합니다. (크론 작업 정의 */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

관련 정보