web-dev-qa-db-ja.com

特定の「画面」セッションでSSH接続を自動再接続する

私は通常、いくつかのターミナルウィンドウを持っており、それぞれがssh経由でリモートサーバーに接続されています。各ウィンドウで、gnu screenプログラムを使用して作業し、切断された場合に対話型プロセスの永続性を確保します。

現在、ssh接続が切断されるたびに(クライアントコンピューターを一晩スリープ状態にしたときなど)、各ウィンドウ内でsshセッションを手動で面倒に再起動し、各ウィンドウで特定の画面セッションを面倒に再開する必要があります(例:「screen-一方のウィンドウではr3453 "、もう一方のウィンドウでは" screen -r 3462 "など)

これを自動化するエレガントな方法はありますか?具体的には:

  • インターネット接続が検出されるとすぐに、sshセッションがドロップした場合は再接続します

  • sshが再接続したらすぐに、ターミナルウィンドウの特定の画面インスタンスを実行します

これに関するヒントをありがとう

10
GJ.

これを実行できます: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を使用するのではなく、名前付き画面セッションを使用することもできます。

10
Jason Axelson

Bashループをハックする必要はありません。 autossh を調べる必要があります。私自身はあまり使用していませんが、コマンドでsshautosshに置き換えるだけだと理解しています。

編集:実際、autosshにはrscreenというスクリプトが付属しており、まさにこの目的のために設計されているようです。

5