リモートサイトで破損した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

関連情報