私は頻繁に学校から自宅の箱に入れますが、通常、クラスを変更してコンピューターを中断すると、パイプが壊れます。ただし、sshは単にロックします- Ctrl+c、 Ctrl+z そして Ctrl+d 効果がありません。
ターミナルを再起動するのは面倒ですが、新しい画面ウィンドウを閉じて再作成するのはさらに面倒です。
だから私の質問、sshを適切に死なせる簡単な方法はありますか(つまり、パイプが「正常に」失敗すると、パイプが壊れたというメッセージで終了します)?または、PIDが何であるかを把握し、手動で強制終了する必要がありますか?
通常のキーは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。)つまり enter~~~~~. ssh
セッションを5層の深さで終了し、他の4つをそのまま保持します。
また、SSHのアプリケーションレベルkeep-alivesをpreventからフリーズしないようにセットアップすることもできます。接続の問題。私の~/.ssh/config
には以下が含まれます:
Host *
ServerAliveInterval 15
# ServerAliveCountMax 3
これにより、sshクライアントは15秒ごとにアプリケーションレベルのキープアライブを送信します。それらのうち3つが連続して失敗するたび(デフォルトはServerAliveCountMax
)、クライアントは接続がハングしていると見なし、それを閉じます。
他のオプションTCPKeepAlive
とは反対に、これは暗号化されたチャネル内でチェックされ、なりすましはできません。
これらのキープアライブは、long-idling接続を維持するのに役立ちます。つまり、 half-closed tcpそのまま何時間もセッションがハングします。
この機能を定期的に実行する場合は、この機能をオンにすることを強くお勧めしますが、それによって課される可能性のあるわずかなセキュリティリスクについても知っておく必要があります。 既知の平文攻撃 は、攻撃者がアイドル接続の間隔と内容を知っている場合、より簡単になる可能性があります。これがデフォルトで有効になっていない理由の可能性があります。
Geekosaurの答えで述べたように、エスケープシーケンス~.
は接続を終了します。
~?
と入力すると、エスケープシーケンスの完全なリストとその機能を表示できます。
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.)