私は通常、いくつかのターミナルウィンドウを持っており、それぞれがssh経由でリモートサーバーに接続されています。各ウィンドウで、gnu screenプログラムを使用して作業し、切断された場合に対話型プロセスの永続性を確保します。
現在、ssh接続が切断されるたびに(クライアントコンピューターを一晩スリープ状態にしたときなど)、各ウィンドウ内でsshセッションを手動で面倒に再起動し、各ウィンドウで特定の画面セッションを面倒に再開する必要があります(例:「screen-一方のウィンドウではr3453 "、もう一方のウィンドウでは" screen -r 3462 "など)
これを自動化するエレガントな方法はありますか?具体的には:
インターネット接続が検出されるとすぐに、sshセッションがドロップした場合は再接続します
sshが再接続したらすぐに、ターミナルウィンドウの特定の画面インスタンスを実行します
これに関するヒントをありがとう
これを実行できます:ssh -t hostname screen -r 3453
再接続します。ループでそれを実行したい場合は、スクリプトで次を使用します。
while true; do
ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
sleep 2
done
これは、パスワードを入力せずにログインできるようにsshキーが設定されている場合に最適に機能します。また、screenのより最新の実装であるtmuxを確認することをお勧めします。私は実際に上記のスクリプトをscreenで使用しています。例のようにpidを使用するのではなく、名前付き画面セッションを使用することもできます。
Bashループをハックする必要はありません。 autossh を調べる必要があります。私自身はあまり使用していませんが、コマンドでssh
をautossh
に置き換えるだけだと理解しています。
編集:実際、autosshにはrscreen
というスクリプトが付属しており、まさにこの目的のために設計されているようです。