ウェブサイト検索

Linuxで応答しないSSHセッションを終了する方法


LinuxでSSH接続が応答しなくなり、キーストロークが機能しない場合の対処法はこちらです。

リモートSSHセッションで入力しているかもしれませんが、突然、何も起こりません。システムがあなたのキー入力に応答しないようです。どうしますか?

ここにその理由があります。応答しないSSHセッションを終了する方法と、なぜMoshに切り替えたいかについて説明します。

SSHセッションがフリーズする原因は何ですか?

SSHセッションがフリーズする主な理由は、ネットワーク接続が切れることです。Wi-Fi信号が途切れたり、コンピュータがスリープ状態になることがあります。これは特にノートパソコンでよく見られます。SSHでまだログインしていることを忘れてノートパソコンの蓋を閉じてしまうことがあります。

SSHはもともと、人々が日常的にノートパソコンを使用する前の時代に設計されました。SSHは有線ネットワーク上でより良く機能します。

1. エスケープシーケンスで終了する

SSHセッションがフリーズした場合は、エスケープシーケンスを使用してみてください。エスケープシーケンスは、リモートマシンの代わりにSSHクライアントに信号を送ることができます。エスケープシーケンスはエスケープキャラクターの前に置かれます。デフォルトのOpenSSHクライアントでは、チルダ(~)キャラクターです。

SSHクライアントを終了するには、チルダキーを押してからピリオド(.)キーを押すことができます。

希望する場合は、エスケープ文字を変更することもできます。コマンドラインで-eオプションを指定することで、新しいエスケープ文字を設定できます。また、ローカルマシンのホームディレクトリにある.ssh/configファイルでEscapeCharオプションを設定することで、恒久的に変更することもできます。

2. killコマンドの使用

エスケープシーケンスが機能しない場合は、SSHクライアントを終了させてみてください。セッションのプロセスID(PID)を見つけるには、psコマンドをgrepでパイプします:

ps aux | grep ssh

"ps"における「aux」引数は、「システム上のすべてのプロセスを、誰のものであるかや制御端末の有無にかかわらずリストします。」を意味します。

複数のセッションがある場合、フリーズしたセッションを選択できます。なぜなら、リストにはSSHセッションがログインしているリモートマシンのユーザー名とアドレスが表示されるからです。セッションのPIDを見つけたら、killコマンドでそれを終了させることができます:

kill [PID]

より良いSSH接続のために、Moshを使おう!

面倒なフリーズしたSSHセッションを避けるためのより良い方法は、Moshを使用することです。接続が切れても、Moshは接続を維持できます。再接続時にメッセージを送信します。また、マシンをスリープ状態にしても動作します。

GNU Screenやtmuxのようなターミナルマルチプレクサを使用して、接続が切れた後にSSHセッションを再開することもできますが、Moshとtmuxを一緒に使うとさらに強力です。

Debian と Ubuntu に Mosh をインストールするには:

sudo apt install mosh

そして、Arch Linuxでは:

sudo pacman -S mosh

Red Hat系ディストリビューションについて:

sudo dnf install mosh

これでスタックしたSSHセッションを解消できます

応答しないSSHセッションはイライラさせることがありますが、エスケープシーケンスやkillコマンドを使ってそれらを取り除くことができます。Moshは、接続の切断やシステムのスリープを通じて接続を維持するためのさらに優れた代替手段です。

関連記事: