接続が失敗しても、SSHプロセスはアクティブなままになりますか?

接続が失敗しても、SSHプロセスはアクティブなままになりますか?

SSHトンネルを確立しようとしたときに接続が失敗しても、プロセスがアクティブのままであることを確認しました。たとえば、hostname終了時に次のコマンドを実行しようとすると、次のようになります。

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname

時々、次のような答えがあります。

Warning: remote port forwarding failed for listen port 3000

元のプロセス(ローカルシステムで実行されています)が終了したがリモートサーバーがまだそれを認識していない場合にのみ、このエラーメッセージが表示されます。プロセスは再起動を試みますが、サーバーはまだ3000の接続があると考えており、新しい接続を除外せずに上記の警告が発生します。

ところで、こうすればpgrep -x sshその過程がまだ残っていることがわかります。トンネルが設定されていることを最初に確認し、そうでない場合はリセットするbashスクリプトの一部としてcronjobでこのsshコマンドを実行したいが、スクリプトの設定方法はa)トンネルがダウンしていることを確認して試みます。 (秘密に失敗する)新しいプロセスを作成するか、b)失敗したプロセスがまだ存在していることを確認し、何もしません。その結果、失敗したプロセスが続く限り、トンネルはリセットされません。

接続が失敗した場合に警告を受けるのではなく、プロセスを直接終了する方法はありますか?

ベストアンサー1

答えを見つけることができる他の人のために私が見つけたオプションを見つけました。この回答-o ExitOnForwardFailure=Trueゾンビプロセスを作成する代わりに、ポート転送が失敗したときにsshを強制終了するコマンドを追加します。

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname -o ExitOnForwardFailure=True

おすすめ記事