成功するまでsshコマンドを実行するには?

成功するまでsshコマンドを実行するには?

時々、デバイスを再起動し、sshデバイスが準備ができたら再起動する必要があります。

コマンドが成功するまで、5秒ごとにsshコマンドを実行したいと思います。

私の最初の試み:

watch -n5 ssh [email protected] && exit 1

どうすればいいですか?

答え1

別のオプションはを使用することですuntil

until ssh [email protected]; do
    sleep 5
done

複数のホストに対してこの操作を繰り返し実行する場合~/.bashrc

repeat()
{
read -p "Enter the hostname or IP of your server :" servername
until ssh $servername; do
    sleep 5
done
}

答え2

ssh [email protected]
until !!; do sleep 5 ; done

!!前のコマンドを繰り返します。

答え3

OpenSSHはConnectionAttemptsあなたのニーズにほぼ合うように設定されています。デフォルト値は1ですが、コマンドラインssh_configまたはコマンドラインから変更できます。

ssh -o 'ConnectionAttempts 10' ...

ConnectTimeout残念ながら、1秒に固定されている試行間隔を調整することはできませんが、同じ方法で接続試行タイムアウト(秒単位)を調整できます。

答え4

autosshSSHセッションをアクティブにしてください。正しいパラメータを使用すると、現在接続できない場合でも起動でき、成功するまで試みます。これはうまくいきますが、必要に応じて~について接続部分が対話型セッションとうまく機能するには、screenまたは同等のものと組み合わせる必要があります。

私はこれをお勧めします:

AUTOSSH_POLL=5 AUTOSSH_GATETIME=0 autossh -M 0 -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@host

ただし、詳細はマンページを参照してください。上記のパラメータを使用すると、autossh毎秒sshを起動しようとし、AUTOSSH_POLL最初AUTOSSH_GATETIME=0の試みが失敗した場合は再試行し(これは確かに望むものです)、-M 0autosshの接続チェックを無効にし、その後のすべてのオプションをsshに渡します。-oこれら2つのオプションを使用すると、接続が5秒以上切れた場合にsshが終了します。

関連情報