特定の「スクリーン」セッションでのSSH接続の自動再接続


10

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

現在、ssh接続が切断されたとき(クライアントコンピューターを一晩スリープ状態にするときなど)は、各ウィンドウ内で手動で退屈にsshセッションを再起動し、各ウィンドウで特定のスクリーンセッション(たとえば「画面- 1つのウィンドウで「r 3453」、他のウィンドウで「screen -r 3462」など)

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

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

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

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

回答:


10

これを実行してssh -t hostname screen -r 3453、再接続できます。ループで実行する場合は、スクリプトで次のコードを使用します。

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

これは、ssh-keys設定があり、パスワードを入力せずにログインできる場合に最適です。screenのより現代的な実装であるtmuxをご覧になることもお勧めします。上記のスクリプトを実際に画面で使用しています。また、例のようにpidを使用するだけでなく、名前付きスクリーンセッションを使用することもできます。


ありがとう!「-o BatchMode = yes」は正確には何ですか?
GJ。

パスワードを要求しないようにすることができます。「man ssh_config」から:「パスフレーズ/パスワードクエリは無効になります。このオプションは、パスワードを入力するユーザーが存在しないスクリプトやその他のバッチジョブで役立ちます。」したがって、ssh-keysがすでに設定されている場合にのみ使用してください。
Jason Axelson、2010

5

bashループをハックする必要はありません。autosshを調べる必要があります。私はあまり自分自身をそれを使用していないが、私の理解では、あなたは、単に交換することであるsshautossh、あなたのコマンドで。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.