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


157

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



@javano:聞いたことがない。それを答えとして追加してください!
kbyrd

@kbyrd終わった;)
jwbensley

同様の質問がunix.stackexchange.com/questions/105001/で尋ねられました…最初に切断を回避する方法についてのいくつかのヒントとともに...
anarcat

回答:


136

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

これは答えではなく、回避策です。画面を使用します

最初にログインしたときに、画面を実行します。別のシェルを取得し、その中でコマンドを実行します。接続が切断された場合、シェルと実行中のプロセスが失敗しないように、画面プロセスは端末をアクティブに保ちます。再接続したら、「screen -r」を実行して再開します。

画面の構成と使用にはさらに多くの方法がありますが、上記の方法で問題を回避できます。


18
または、tmux(「クーラー」画面)を使用します。両方を使用しましたが、tmuxを好むのは、用語をうまく分割できるからです。
ジョンハント

3
私は見つけることが幸せだったscreenあなたがわからないだけで、このコマンドをしようとした場合、それは再接続して再開したように、すでに私のUbuntu 12.xの上に設置されたDO-リリース・アップグレード sudoの画面-D -r:プロセス
bjm88

1
@ bjm88はsudo、元のスクリーンセッションがsudoで開始された場合にのみ使用してください。それ以外の場合には、画面のセッションが存在しないかのように返されます:There is no screen to be detached
ノーム・マノス

+1これは実際の答えではないことがわかります。しかし、screen -rだったまさに私が探していたもの。
エリックネルソン

130

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

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


24
これまでのところ、回避策として画面を提案するのではなく、実際に質問に答えているのはあなただけのようです。
kbyrd 09年

2
良い電話。この方法は、Cisco ASA / PIXファイアウォールを通過するときに特に役立つことがわかりました。デフォルトでは、tcp接続のタイムアウトが大好きです。
マイクポウ

5
たぶん、これは尋ねるのに適切な場所ではありませんが、ポスターが答えを切り替えることは可能ですか?この情報を「スクリーン」と答える必要があります(私のものは最高ではありません。マイクポウントニーが好きですが、担当者を迎えました)。
kbyrd 09年

1
これは、Cisco VPN接続を介して接続したときに機能し、VPN接続は失われ、再確立されますか?
ブレント

私のための画面が完璧に動作し、私は仕事への選別作業やcountiuneに再接続することができます
integratorIT

65

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

' man screen'はいつものようにあなたの友人であり、OSパッケージはscreenデフォルトでインストールされていない場合は' ' と呼ばれるべきです。

基本は次のとおりです。

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

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

  • 再度ログインした後、スクリーンセッションに再接続します。

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

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

Screenでできることはたくさんあります。私はこれを10年以上使用していますが、まだ新しい機能を見つけています。私のお気に入りのUnixユーティリティです。


1
ええ、これは私のものよりもはるかに良い答えです。
kbyrd 09年

画面が実行されているPCを再起動すると、切断されたsshセッションに接続できますか?
BarathVutukuri

tmuxはより強力です
ペガサス

46

私は誰も言及していないなんて信じられません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は
    常に暴走プロセスを停止するように動作します。


8
Moshはsshラッパーではありません-sshとはほとんど関係のない異なるプロトコルです(ログインにはsshのみを使用します)。
jch

+1間違いなく、私の間違い。
jwbensley

2
セキュリティについてはどうですか?暗号化?鍵交換?
ナシルイクバル

Moshは見た目は素晴らしく見えますが、残念ながらまだポート転送をサポートしていませ
-Boann

20

autosshは接続を監視し、接続がダウンした場合は再接続します。キープアライブよりも信頼性があります。スクリーンセッションに接続する場合は、切断したところから続行します(rscreenautosshに付属しています)


1
構成可能なキープアライブ以外では、本質的にセッションに再接続することはできません(OPが探していたもの)。しかしautosshは、SSHトンネルを必要とするアプリケーション、ポートマッピングなどのために本当に役立つことができる
アイヴス

はい、autossh + screenは最適な場所です。autosshにrscreenはこれがあります。
hayalci

autosshはmoshよりも優れています。両方使用しました。
スリダールサルノバト

screenでautosshを使用することについてのJesse Keatingによるブログ投稿があります
サンパブロクパー

12

tmux

これはクラシックです。ターミナルへの接続が失われる危険がある場合は必ず使用してください。

$ 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

そのように、あなたは行動に戻りました。


トンありがとう!tmuxでこれを行う方法を探していました。これは、ほとんどの人がより良いオプションと考えるものだからです。
CoolOppo

10

問題を修正するために、画面をインストールして起動します。Screenを使用すると、前のスクリーンセッションに再接続できます。

それとは別に、screenでは、画面の分割、コンソールの表示などのクールなこともできます。詳細については、こちらこちらをご覧ください

まず、切断された場合は、次を使用できます。

screen -ls

セッションを表示し、

screen -r ${session} 

切断されたものに再接続します。


4

他の人が指摘しているように、画面は一般的にこれに最適なソリューションであり、他の便利な機能も追加します。

ログイン時に画面を自動的に開始および/または再接続するようにリモートマシンでプロファイルを設定できます。これにより、接続が切断されたために必要なときに画面を開始するのを忘れることがなくなります。

http://tlug.dnho.net/?q=node/239を参照してください(または、Googleで検索してください。他の多くの例では、やや異なる方法があります)。


3

より現代的なスクリーンの代替手段であり、残念ながら一部のタイプの「仮想化」では利用できません(たとえば、cygwinでは「スクリーン」を使用できますが、設計方法により「tmux」は使用できません)。 、私は画面のinsted 1つに行くことを強くお勧めします。


3

もう1つの非スクリーンソリューションがあります。

Puttyトレイを使用すると、それを行うことができます。通常の接続ではなく、切断時に再接続するオプションがあります。

https://puttytray.goeswhere.com/

他のオプションを備えた(完全にオープンソースの)パテのフォークであり、接続設定に移動し、「接続障害時に再接続を試行する」および「起動時に再接続を試行する」ための2つのオプションがあります。


1
えー 万が一、キーロガーと自動ppk抽出ユーティリティが付属していますか?
鹿ハンター

1
私はそれが完全にオープンソースですが、それは何らかの形で、あなたの詳細を盗む場合は、求めていると仮定していますあなたが見てしたい場合は、ソースコードはgithubの上で利用可能であるそのgithub.com/FauxFaux/PuTTYTrayがかなりの数の貢献者は、次のとおりです。 )
マンキープス

素晴らしい歓声:)
munkiepus

2

sshセッションがドロップした場合、screenはリモートサーバー上でシェルセッションを開いたままにしますが、ssh接続がドロップされる問題については何もしません。zero_rが示唆するように、キープアライブと長いタイムアウトでssh接続を調整してみてください。

問題を引き起こしているパケットの損失の原因を追跡し、それを回避する代わりに修正することをお勧めします。


提案をありがとう。私たちは、パケット損失の根本的な問題の追跡に取り組んでいます。それを理解するには、しばらく時間がかかります(これは非常にトリッキーです!)。これは本当にこのトラブル期間の回避策です。接続が切断される原因がいつになるかはわかりません。
パレホース2009年

1
多くのノイズが生成されますが、straceを使用してsshを実行し、ssh接続が切断されたときに何を実行/報告するかを確認できます。...それはちょうどあなたがすでに知っていることを報告することがありますが、誰が知っている
デヴィッド・

1

時々、私もスクリーンを走らせるのを忘れて、未完成の仕事を失いました。この場合、壊れたSSHセッションに再接続することはできませんが、実行中のプログラムを新しい端末に親に変更し、実行中の操作を再開することは、まだ可能reptyrです。

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

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