シェルスクリプトはサーバーへの接続を終了しますが、接続は開いたままになります。

シェルスクリプトはサーバーへの接続を終了しますが、接続は開いたままになります。

複数のデバイスの名前をデフォルト値に変更するlinux / Fedoraサーバーでシェルスクリプトを作成/実行しています。最初のデバイスで完了すると、接続は閉じられないため停止します。スクリプトのデフォルト値はipsで、ネットワークサービスを再起動します。デバイスで実行するときに接続をどのように閉じますか?

リセットするスクリプトは次のとおりです。

/bin/ssh $CHECKME -o ConnectTimeout=5 "/usr/local/bin/NameTerm.sh reset"

ここCHECKMEから接続機器のIPを取得すると正常に動作します。NameTerm.shIPアドレスを再び0.0.0.0に設定した後にサービスネットワークを再起動するシェルスクリプト。スクリプトを変更できません。

答え1

SSHサーバーが消えても、クライアント側ではTCP接続が存在し続け、SSHクライアントはデフォルトでこれを待ちます。

このConnectTimeoutオプションは、次の状況で使用される名前によって異なります。つながる、接続がすでに有効になっているわけではありません。

ServerAliveInterval代わりに、以下を使用したい場合がありますServerAliveCountMax

ServerAliveCountMax

ssh(1)がサーバーからメッセージを再受信できない場合に送信できるサーバーアクティブメッセージの数(以下を参照)を設定します。サーバー活動メッセージの送信中にこのしきい値に達すると、sshはサーバーとの接続を切断してセッションを終了します。

ServerAliveInterval     

サーバーからデータが受信されない場合、ssh(1)は暗号化されたチャネルを介してメッセージを送信してサーバーに応答を要求するタイムアウト間隔(秒単位)を設定します。デフォルトは 0 で、これはこれらのメッセージがサーバーに送信されないことを意味します。

これは約3x5 = 15秒を待ちますが、ServerAliveCountMaxデフォルトは3ですServerAliveInterval

ServerAliveCountMax 3
ServerAliveInterval 5

関連情報