フォローアップ:各サーバーの数か月の実行と一致する急速な一連の切断は、おそらく偶然であり、実際の問題を明らかにするのに役立つようです。再接続に失敗した理由は、ほぼ確実にAliveInterval値(kasperdの答え)によるものです。ExitOnForwardFailureオプションを使用すると、再接続する前にタイムアウトが適切に発生し、ほとんどの場合に問題が解決するはずです。MadHatterの提案(killスクリプト)は、おそらく他のすべてが失敗した場合でもトンネルが再接続できるようにするための最良の方法です。
ファイアウォールの背後にあるサーバー(A)を使用して、いくつかのポートで小さなDigitalOcean VPS(B)への逆トンネルを開始し、BのIPアドレスを介してAに接続できるようにします。トンネルは約3か月間一貫して機能していますが、過去24時間で突然4回故障しました。同じことが別のVPSプロバイダーでしばらく発生しました-数か月の完全な運用、その後突然の急速な障害。
マシンAに(ssh -R *:X:localhost:X address_of_B
各ポートXに対して)トンネルコマンドを自動的に実行するスクリプトがありますが、実行すると、というメッセージが表示されWarning: remote port forwarding failed for listen port X
ます。
/var/log/secure
サーバーのsshdにアクセスすると、次のエラーが表示されます。
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
解決するには、VPSを再起動する必要があります。それまでは、すべての再接続の試行で「リモートポート転送に失敗しました」というメッセージが表示され、機能しません。これで、トンネルは停止するまで約4時間しか続きません。
VPSには何も変更がなく、リバーストンネルエンドポイントとしてのみ機能する使い捨てのシングルユーザーマシンです。CentOS 6.5でOpenSSH_5.3p1を実行しています。接続が失われたときに、sshdが最後にポートを閉じていないようです。ほぼ完璧な操作を数か月続けた後、なぜ、またはなぜ突然起こるのかを説明するのに途方に暮れています。
明確にするために、まず、トンネルが失敗した後にsshdがポートのリッスンを拒否する理由を理解する必要があります。それが主な問題のようです。期待通りの動作を数か月続けた後(つまり、すぐにポートを閉じてスクリプトを再接続できるようにした後)、このように動作する原因が何なのかわかりません。