解決策 1:
サーバー側の sshd.conf で ClientAliveInterval (例:60) と TCPKeepAlive (yes または no) を適切な値に設定してみてください。
これにより、接続が数分間失われた場合でも、セッションが維持されます。
解決策 2:
更新:実際の回答については、以下の zero_r の回答を参照してください
これは答えではなく、回避策です。スクリーンを使用します。
初めてログインするときは、screen を実行します。別のシェルを取得し、その中でコマンドを実行します。接続が切断されている場合、スクリーン プロセスは端末を存続させ、シェルとそれが実行しているプロセスが失敗しないようにします。再接続したら、「screen -r」を実行して再開します。
screen の構成と使用については他にもたくさんありますが、上記の方法で問題を回避できます。
解決策 3:
前述のように、GNU Screen が最適です。複数の「スクリーンウィンドウ」を介して複数のコマンドを実行できるリモートボックスで「スクリーンセッション」を行うことができます。これは、親の SSH 接続が切断された場合に単純に切り離され、その中で実行されているすべてのサブプロセスを維持します。
'man screen
' はいつものようにあなたの友人であり、OS パッケージは 'screen
' という名前にする必要があります。 ' デフォルトでインストールされていない場合。
基本は次のとおりです。
-
screen セッションを開始します (リモート ホストで):
$ screen
-
screen セッションから切断:CTRL-A 、d
-
再度ログインした後、screen セッションに再接続します。
$ screen -d -r
-
別の画面「ウィンドウ」を開く:CTRL-A 、c
-
開いている画面ウィンドウを切り替えます:CTRL-A 、スペース
たくさんあります Screen でできる便利な機能を紹介します。 10年以上使っていますが、まだ新しい機能を見つけています。私のお気に入りの Unix ユーティリティです。
解決策 4:
誰もMOSHについて言及していないなんて信じられない;
Mosh は、SSH ログイン プロセスにフックできる別のプロトコルであり、切断、IP の変更、高遅延などの数日後もセッションを維持します。ホームページの方が説明しきれないので、下の説明をコピーしました。私の経験とアドバイスは、私が Android モバイルで使用しているということです。旅行中や SSH 接続するときの命の恩人です。たとえば、電車の中でモバイルにテザリングされている場合、ラップトップでも同じことが言えます。ソースからコンパイルして最新バージョンを取得することをお勧めします。Ubuntu 内のレポ バージョンには、最新バージョン (執筆時点) で修正されているいくつかの問題があります。
<ブロック引用>Mosh (モバイル シェル)
ローミングを許可し、断続的な接続をサポートし、ユーザーのキーストロークのインテリジェントなローカル エコーとライン編集を提供するリモート ターミナル アプリケーション。
Mosh は SSH の代替です。特に Wi-Fi、セルラー、および長距離リンクで、より堅牢で応答性が高くなります。
Mosh はフリー ソフトウェアで、GNU/Linux、FreeBSD、Solaris、MacOS X、および Android で利用できます。
ウェブサイトの機能:
-
IP を変更します。つながり続ける :インターネット接続間を移動すると、Mosh は自動的にローミングします。電車では Wi-Fi、ホテルではイーサネット、ビーチでは LTE を使用します。ログインしたままになります。ほとんどのネットワーク プログラムは、ローミング後に接続を失います。これには、SSH や Gmail などの Web アプリケーションが含まれます。モッシュは違います。
-
甘い夢を叶える :Mosh を使用すると、ラップトップをスリープ状態にして後で起動し、接続を維持できます。インターネット接続が切断された場合、Mosh が警告しますが、ネットワーク サービスが回復すると接続が再開されます。
-
ネットワーク ラグをなくす :SSH は、自分の入力を表示する前にサーバーの応答を待ちます。これは、お粗末なユーザー インターフェイスになる可能性があります。 Mosh は違います。入力、削除、および行編集に即座に応答します。これは適応的に行われ、emacs や vim などのフルスクリーン プログラムでも機能します。接続が悪い場合、誤解を招かないように、未解決の予測に下線が引かれます。
-
特権コードはありません。デーモンなし :Mosh をインストールまたは実行するためにスーパーユーザーである必要はありません。クライアントとサーバーは、通常のユーザーによって実行される実行可能ファイルであり、接続が存続している間だけ存続します。
-
同じログイン方法 :Mosh は、ネットワーク ポートをリッスンしたり、ユーザーを認証したりしません。 mosh クライアントは SSH 経由でサーバーにログインし、ユーザーは以前と同じ資格情報 (パスワード、公開鍵など) を提示します。次に、Mosh は mosh-server をリモートで実行し、UDP 経由で接続します。
-
端末内で実行されますが、より優れています :Mosh は ssh のようなコマンドライン プログラムです。 xterm、gnome-terminal、urxvt、Terminal.app、iTerm、emacs、screen、または tmux 内で使用できます。しかし、mosh はゼロから設計されており、UTF-8 という 1 つの文字セットしかサポートしていません。他の端末や SSH の Unicode バグを修正します。
-
Control-C がうまく機能します :SSH とは異なり、mosh の UDP ベースのプロトコルはパケット損失を適切に処理し、ネットワークの状態に基づいてフレームレートを設定します。 Mosh はネットワーク バッファをいっぱいにしないので、Control-C
暴走プロセスを停止するために常に機能します。
解決策 5:
autossh は接続を監視し、ダウンした場合は再接続します。キープアライブよりも信頼性が高くなります。 screen セッションに接続すると、切断したところから続行されます (rscreen
を参照)。 autossh に付属しています)