ループ内で ssh トンネルを実行するのは良くない考えですか? ポートは既に使用されていますか?

ループ内で ssh トンネルを実行するのは良くない考えですか? ポートは既に使用されていますか?

私は、職場の物理的に設置されているサーバー (CentOS を実行) から自宅 (Ubuntu) への SSH トンネルを設定しました。これにより、職場のコンピューターで次のようなコマンドを使用して、自宅から職場のトンネルにログインできるようになります。

ssh -R 49666:localhost:22 homename@homeIP -N

キーなどを作成しました。職場から自宅に ssh し、自宅のコンピューターからリモートで職場に ssh してテストしました。問題なく動作しました。双方向でファイルを scp できました。

後で家に帰ると、何らかの理由でトンネルが閉じられていることがわかりました。理由はわかりませんでした。後で同僚に尋ねたところ、彼も同じ問題を抱えており、仕事用のコンピューターで次のようなスクリプトを常に実行しているとのことでした。

while true
 ssh -R 49666:localhost:22 homename@homeIP -N
 sleep 15

基本的に、壊れたトンネルが壊れたときに自動的に再起動するように、これを永続的に実行しています。

私もこれを試し、テスト (職場にいながら自宅のコンピューターを使用してリモートで職場から自宅に SSH 接続) を実行したところ、再び問題ないように見えました。しかし、帰宅すると、再びトンネルが機能しませんでした。auth.log を調べたところ、同じタイムスタンプで次の 3 行が見つかりました。これは、帰宅途中の頃のはずです。

Accepted publickey from work IP (I erased the rest for my privacy)
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 49666

何か他のものが使用しているときに、トンネルをポート 49666 にバインドしようとしたようです。 わかりました、なぜ失敗するのかはわかりました。 そこで、ポート 49666 を使用しているものを見つけて、それを強制終了しようとしました。 しかし、何も使用されていないようです。 netstat、lsof などを試しました。 ポート 49666 を使用しているものはありません。 トンネル以外でポート 49666 を使用するものは何もないと思います。 トンネルがすでに存在しているときにトンネルを作成したのでしょうか。 または、トンネルがすでに存在していた場合、トンネリング ループ スクリプトは何も行わないのでしょうか。

ポート 49666 を使用しているものが何もないので、仕事用コンピューターのトンネル スクリプトがループを再度実行すると、トンネルが自動的に再確立されるはずですが、そうではないようです。

職場のサーバーに物理的に戻らずにこの問題を解決する方法はありますか? または、少なくとも、定期的に戻らなくても済むように、1 つの調整だけで解決する方法はありますか?

サーバーがシャットダウンすることはないので、理論的には、ループ スクリプトは引き続き実行されるはずです。しかし、トンネルの作成に失敗した後に、スクリプト自体が終了する可能性はありますか?

関連情報