切断されたSSHセッションに再接続する方法

切断されたSSHセッションに再接続する方法

切断された ssh セッションに接続する方法はありますか? 別々に作業しているリモート サイトへのネットワーク接続に問題があります。しかし、その間に、リモート ロケーションのサーバーに接続中にパケットが失われるため、多数の切断が発生しています。セッションはしばらくアクティブなままになることが多く、場合によっては、何らかのアクション (ファイルの編集、プロセスの実行など) の途中になることがあります。その場合は、可能であれば再起動するのではなく、元に戻す必要があります。

答え1

更新: 実際の回答については、以下の zero_r の回答を参照してください。

これは答えではなく回避策です。画面

最初にログインしたら、screen を実行します。別のシェルが開き、その中でコマンドを実行します。切断された場合、screen プロセスはターミナルを稼働させ続けるので、シェルと実行中のプロセスは停止しません。再接続したら、「screen -r」を実行して再開します。

画面の設定と使用にはさらに多くの手順がありますが、上記の手順で問題は回避できるはずです。

答え2

サーバー側の sshd.conf で、ClientAliveInterval (例: 60) と TCPKeepAlive (yes または no) を適切な値に設定してみてください。

これにより、接続が数分間失われた場合でもセッションが維持されます。

答え3

上記のように、GNUスクリーンが正しい方法です。これにより、リモート ボックスで複数の「スクリーン ウィンドウ」を介して複数のコマンドを実行できる「スクリーン セッション」が可能になります。親 SSH 接続が切断された場合、これは単に切断され、その中で実行されているすべてのサブプロセスは正常に維持されます。

man screenscreenはいつものようにあなたの友人であり、デフォルトでインストールされていない場合はOS パッケージを呼び出す必要があります。

基本は次のとおりです。

  • スクリーンセッションを開始します(リモートホスト上):

      $ screen
    
  • スクリーンセッションから切断します: CTRL-Ad

  • 再度ログインした後、画面セッションに再接続します。

      $ screen -d -r
    
  • 別の画面「ウィンドウ」を開く: CTRL-Ac

  • 開いている画面ウィンドウを切り替えます: CTRL-Aspace

があるたくさんscreen で実行できるすばらしい機能の 1 つです。私は 10 年以上使用していますが、今でも新しい機能を発見し続けています。これは私のお気に入りの Unix ユーティリティです。

答え4

時々、screen の実行を忘れて、未完成の作業が失われることがあります。この場合、壊れた SSH セッションに再接続することはできませんが、実行中のプログラムを新しいターミナルに再配置し、作業していたことを再開することは、 のおかげで可能ですreptyr

SSH セッションから誤って切断された場合、まず最初に実行すべきことは、screen接続が再び切断されないように を実行することです (または tmux など、お好きなものを使用します)。次に、新しいセッションで を実行してps aux | grep {The process to be resumed}PID を取得します。PID があれば、 を試すreptyr {PID}reptyr -T {PID}(サブプロセスがある場合)、作業を続行できます。


その他の注意事項:

また、サーバー側のsshd.confでClientAliveInterval(例:60)とTCPKeepAlive(はいまたはいいえ)を適切な値に設定することを検討してください。zero_rの回答で述べたようにまたは、Starlink in Stormのようなパケット損失率が非常に高いネットワーク環境で作業する必要がある場合、MOSHに切り替える、SSH の代替ですが、UDP に基づいています。

関連情報