ロック時にsshから抜け出すにはどうすればよいですか?


380

私は頻繁に学校から自宅の箱に入れますが、通常、クラスを変更してコンピューターを中断すると、パイプが破損します。ただし、sshは単純にロックアップします- Ctrl+ cCtrl+ zおよびCtrl+ dは効果がありません。

ターミナルを再起動するのは面倒ですが、新しい画面ウィンドウを閉じて再作成するのはさらに面倒です。

だから私の質問は、sshを適切に死なせる簡単な方法がありますか(つまり、パイプが「正常に」失敗すると、パイプが壊れたというメッセージで終了します)?または、PIDが何であるかを把握し、手動で強制終了する必要がありますか?


アクティブなSSHセッションで切断された場合、フリーズします。私はただそれを殺し、新しいセッションを開始します。GNU画面を使用しているため、情報は失われません。
Lekensteyn

私も-画面が最高です。しかし、それはまだ面倒ですscreen -x:P
ウェインワーナー

[mosh](mosh.mit.edu)は、この問題を回避するための適切な代替手段です。断続的なインターネット接続でも「接続されたまま」です。
jaynp 14

@jaynp moshを使用することの欠点(2分前から)は、切断する方法がわからないことです。リモートホスト上でtmux + irssiセッションを(IRCバウンサーなどとして)使用していますが、時々(tmux + irssiを実行したまま)切断したいので、<enter> +〜+を使用しました。SSHを使用しますが、moshを使用しても機能しません。
パベルシメルダ

回答:


534

通常のキーはsshセッション中に転送されるため、どれも機能しません。代わりに、エスケープシーケンスを使用します。現在のセッションを殺すためには、その後ヒットEnter ↵~.

これらのエスケープシーケンスのよりは、と記載されていることができEnter ↵~?

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

を押すと、エスケープシーケンスのリストを閉じることができenterます。

打つためていることに注意してください~~原因がssh送信する~代わりにそれを遮断する、あなたが対処することができますN入れ子にssh押すことで接続を~ Nの回。(これ~enter。に直接続くsにのみ適用されます。)つまりenter~~~~~.sshセッションを5層の深さで終了し、他の4をそのまま保持します。


48
デッドキー~があるキーボードレイアウトの場合、キーシーケンスはです。Enter ~ Space .
ソーレンLøvborg12年

1
私がしまし追加役に立つかもしれないエスケープシーケンスの多くを。:)
gertvdijk

5
あなたが行のコメントを解除する必要があることに注意EscapeChar ~して/etc/ssh/ssh_config(または~/.ssh/ssh_configあなたが好む場合)。
アディティアMP

6
@Hitechcomputergeek SSHセッションを介してリテラルを送信するEnter ~ ~ .ため、2番目のSSHセッションはそれを単一のチルダとして受け取り、エスケープの一部として解釈します。5番目のネストされたsshセッションに送信するには、エスケープシーケンスで5つのチルダを使用します。~ ~~.
Score_Under

4
人生の変化;)
artm

54

SSHのアプリケーションレベルのキープアライブを設定して、接続の問題でフリーズするのを防ぐこともできます。私に~/.ssh/configはこれが含まれています:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

これにより、sshクライアントは15秒ごとにアプリケーションレベルのキープアライブを送信します。それらのうち3つが連続して失敗する(デフォルトのServerAliveCountMax)たびに、クライアントは接続がハングしたと見なし、それを閉じます。

他のオプションとは反対にTCPKeepAlive、これは暗号化されたチャネル内でチェックされ、なりすましはできません。


これらのキープアライブは、長時間のアイドル接続を維持するのにも役立ちます。つまり、半分閉じた tcpセッションがそのまま何時間もハングするのを防ぎます。

この機能を定期的に実行する場合は、この機能を有効にすることを強くお勧めしますが、それによって課される可能性のあるわずかなセキュリティリスクについても知っておく必要があります。クリブは、攻撃者がアイドル状態の接続の間隔と内容を知っていれば容易になるかもしれません。これがデフォルトで有効になっていない理由の可能性があります。


3
セキュリティ上の理由。飲みに行ってssh sessioを開いたままにしておくと、過去20年間働いていたラボパートナーがセッションを使用してサーバーをハイジャックし、それを破壊する可能性があります。
ルイスアルバラード

2
@CYREX、え?また、デフォルトのオプションでオフにすると、不公平なラボパートナーがいるのを防ぐことができますか?%)
ulidtko

1
@ulidtko:ServerAliveInterval失われた接続がすぐに検出されるように1に設定しない理由はありますか?
krlmlr

2
@gertvdijk:ありがとう。私にとっては、Hostラインがなくても動作します。また、「Advanced Encryption Standardなどの最新の暗号は、現在既知のプレーンテキスト攻撃の影響を受けません。」(追加したリンクから)...
krlmlr

2
SSHをMosh(モバイルシェル)に置き換えることもできます。MoshはSSH経由でサーバーに接続しますが、接続の問題に対して回復力のあるUDPベースのチャネルを確立します。Moshにはローカルエコーもあるため、サーバーが応答していない場合でも、入力内容を確認できます。キーストロークが配信されると、Moshはエコーされたテキストにマークを付けます。mosh.mit.edu
パスカルロジン

41

ギーコサウルスの答えで述べたように、エスケープシーケンス~.は接続を終了します。

次のように入力すると、エスケープシーケンスの完全なリストとその機能を表示できます~?

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

エスケープシーケンスのリストを閉じるにはどうすればよいですか?
クリスチャンプ

3
エスケープシーケンスリストを出力した後、次のリストを受け入れる準備ができていません。
テハスケール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.