2つのLinuxシステムがあります。あるシステムはSSHを介して別のコンピュータに継続的に接続されています。
接続が閉じられたことを検出すると、SSH を介して再接続し、特定のコマンドを実行します。
これは可能ですか?
私はcronjobを見ましたが、sshが接続を閉じるなどを検出できませんでした。
答え1
接続が失われるとsshが終了するため、無限ループでsshを起動するスクリプトを作成したり、sshがコード255(エラー発生)で終了したときに繰り返される条件ループで作成したりできます。これにより、スクリプトはsshが終了するのを待ち、エラーのために再起動します。または、Adrian Zauggが提案したように使用することもできますautossh
。より具体的な回答を得るのに十分な設定の詳細を指定していません。
これは「一般的な」例ですが、特定の状況では機能しない可能性があります。
サーバーは公開鍵認証を許可するように設定し、クライアントの公開鍵を承認する必要があります。
クライアントシステムの〜/ .ssh / configファイルは、sshクライアントが切断を検出するために対話し、pingパケットを送信する必要がないように接続するホストを設定する必要があります。
Host serverhost User username IdentityFile /home/user/.ssh/id_rsa ServerAliveInterval 30 ServerAliveCountMax 2
ここでの設定は、IdentityFile
認証に使用される秘密鍵の名前、pingの間の秒数ServerAliveInterval
、ServerAliveCountMax
応答しないpingによってSSHが終了する回数です。上記の設定を使用すると、1分後に切断されたことが検出されます。
- スクリプトは一度だけ起動する必要があります(またはそのPIDを覚えて再起動するときは、以前のインスタンスを終了する必要があります)。スクリプトは次のとおりです。
#!/bin/sh while true ; do ssh serverhost if [ $? -ne 255 ] ; then break fi done
これは、shシェルがインストールされていて秘密鍵にパスワードがなく、SSHセッションがバックグラウンドで実行されることを望まず、SSHセッションが完全に終了するまでスクリプトを再起動しないと仮定します。仮定が多いので、先ほど述べたように明確に答えるには細部が必要です。申し訳ありません。推測する時間がありません。