切断されたsshセッションに接続する方法はありますか?個別に作業しているリモートサイトへのネットワーク接続に問題があります。ただし、当面は、リモートロケーションのサーバーに接続している間にパケットが失われるため、多数の切断が発生します。多くの場合、セッションはしばらくアクティブのままになり、場合によっては、可能な場合は再起動するのではなく、戻る必要があるアクション(ファイルの編集、プロセスの実行など)の途中にあることがあります。
切断されたsshセッションに接続する方法はありますか?個別に作業しているリモートサイトへのネットワーク接続に問題があります。ただし、当面は、リモートロケーションのサーバーに接続している間にパケットが失われるため、多数の切断が発生します。多くの場合、セッションはしばらくアクティブのままになり、場合によっては、可能な場合は再起動するのではなく、戻る必要があるアクション(ファイルの編集、プロセスの実行など)の途中にあることがあります。
回答:
更新:実際の回答については、以下のzero_rの回答を参照してください
最初にログインしたときに、画面を実行します。別のシェルを取得し、その中でコマンドを実行します。接続が切断された場合、シェルと実行中のプロセスが失敗しないように、画面プロセスは端末をアクティブに保ちます。再接続したら、「screen -r」を実行して再開します。
画面の構成と使用にはさらに多くの方法がありますが、上記の方法で問題を回避できます。
screen
あなたがわからないだけで、このコマンドをしようとした場合、それは再接続して再開したように、すでに私のUbuntu 12.xの上に設置されたDO-リリース・アップグレード sudoの画面-D -r:プロセス
sudo
、元のスクリーンセッションがsudoで開始された場合にのみ使用してください。それ以外の場合には、画面のセッションが存在しないかのように返されます:There is no screen to be detached
screen -r
だったまさに私が探していたもの。
サーバーサイドsshd.confでClientAliveInterval(60など)とTCPKeepAlive(yesまたはno)を適切な値に設定してみてください。
これにより、接続が数分間失われた場合でも、セッションが維持されます。
前述のように、GNU Screenを使用する方法です。これにより、複数の「スクリーンウィンドウ」を介して複数のコマンドを実行できるリモートボックスで「スクリーンセッション」を使用できます。これは、親SSH接続が切断された場合に単純に切り離され、その中で実行されているすべてのサブプロセスが正常に維持されます。
' man screen
'はいつものようにあなたの友人であり、OSパッケージはscreen
デフォルトでインストールされていない場合は' ' と呼ばれるべきです。
基本は次のとおりです。
(リモートホストで)スクリーンセッションを開始します。
$ screen
スクリーンセッションから切断します:CTRL-A、d
再度ログインした後、スクリーンセッションに再接続します。
$ screen -d -r
別の画面「ウィンドウ」を開きます:CTRL-A、c
画面ウィンドウを開いて切り替える:CTRL-A、space
Screenでできることはたくさんあります。私はこれを10年以上使用していますが、まだ新しい機能を見つけています。私のお気に入りのUnixユーティリティです。
私は誰も言及していないなんて信じられませんMOSHを。
MoshはSSHログインプロセスに接続できる独立したプロトコルであり、切断、IPの変更、高遅延などが発生した後もセッションを維持します。ホームページで説明するよりも説明しやすいので、以下の説明をコピーしました。私の経験とアドバイスは、Androidモバイルで使用することです。旅行やSSHをするとき、それは命の恩人です。たとえば、電車の中で携帯電話をつないでいるとき、私のラップトップでも同じことが言えます。ソースからコンパイルして最新バージョンを取得することをお勧めします。Ubuntu内のレポバージョンにはいくつかの迷惑がありますが、これらは最新バージョン(執筆時点)で修正されています。
モッシュ(モバイルシェル)
ローミングを可能にし、断続的な接続をサポートし、ユーザーのキーストロークのインテリジェントなローカルエコーとライン編集を提供するリモートターミナルアプリケーション。
MoshはSSHの代替品です。特にWi-Fi、セルラー、および長距離リンクを介した、より堅牢で応答性に優れています。
Moshは、GNU / Linux、FreeBSD、Solaris、Mac OS X、およびAndroidで利用できるフリーソフトウェアです。
Webサイトの機能:
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は
常に暴走プロセスを停止するように動作します。
autosshは接続を監視し、接続がダウンした場合は再接続します。キープアライブよりも信頼性があります。スクリーンセッションに接続する場合は、切断したところから続行します(rscreen
autosshに付属しています)
rscreen
はこれがあります。
これはクラシックです。ターミナルへの接続が失われる危険がある場合は必ず使用してください。
$ tmux
$ sh do_something_that_takes_forever
!! Connection fails so you reconnect once you notice
$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]
$ tmux attach -t 0
そのように、あなたは行動に戻りました。
問題を修正するために、画面をインストールして起動します。Screenを使用すると、前のスクリーンセッションに再接続できます。
それとは別に、screenでは、画面の分割、コンソールの表示などのクールなこともできます。詳細については、こちらとこちらをご覧ください。
まず、切断された場合は、次を使用できます。
screen -ls
セッションを表示し、
screen -r ${session}
切断されたものに再接続します。
他の人が指摘しているように、画面は一般的にこれに最適なソリューションであり、他の便利な機能も追加します。
ログイン時に画面を自動的に開始および/または再接続するようにリモートマシンでプロファイルを設定できます。これにより、接続が切断されたために必要なときに画面を開始するのを忘れることがなくなります。
http://tlug.dnho.net/?q=node/239を参照してください(または、Googleで検索してください。他の多くの例では、やや異なる方法があります)。
もう1つの非スクリーンソリューションがあります。
Puttyトレイを使用すると、それを行うことができます。通常の接続ではなく、切断時に再接続するオプションがあります。
https://puttytray.goeswhere.com/
他のオプションを備えた(完全にオープンソースの)パテのフォークであり、接続設定に移動し、「接続障害時に再接続を試行する」および「起動時に再接続を試行する」ための2つのオプションがあります。
sshセッションがドロップした場合、screenはリモートサーバー上でシェルセッションを開いたままにしますが、ssh接続がドロップされる問題については何もしません。zero_rが示唆するように、キープアライブと長いタイムアウトでssh接続を調整してみてください。
問題を引き起こしているパケットの損失の原因を追跡し、それを回避する代わりに修正することをお勧めします。
時々、私もスクリーンを走らせるのを忘れて、未完成の仕事を失いました。この場合、壊れたSSHセッションに再接続することはできませんが、実行中のプログラムを新しい端末に親に変更し、実行中の操作を再開することは、まだ可能reptyr
です。
誤ってSSHセッションから切断された後、最初に最初に行うことはscreen
、接続が再度切断されないようにすることです。次に、新しいセッションで実行ps aux | grep {The process to be resumed}
してPIDを取得します。PIDを使用するとreptyr {PID}
、reptyr -T {PID}
(サブプロセスがある場合)作業を続行することを試みることができます。