回答:
Linuxを使用している場合、次の方法でプロセスを強制終了できます。
ps aux | grep ssh
そして使用する
kill <id>
プロセスを強制終了します。
killコマンドが成功しない場合は、試すことができます
kill -9 <id>
kill -9
あなただけ試した後になるまでkill
。多くのプロセスには、リソースの使用をクリーンアップするシグナルハンドラがあり、接続やその他のシャットダウン前タスクをクリーンに閉じます。-9で強制終了すると、プロセスはクリーンアップを実行せずにすぐに終了します。-9なしで殺すことはほとんどの場合うまくいきます。
kill -9
理由もなく、ショットガンを使って蚊を殺すようなものです。:)
pgrep ssh | xargs kill
ます。-9
実際には何も使用しないでください
ssh
コマンドが1つしかないこと、またはssh
実行中のすべてのコマンドが正常に終了することを前提としています。これは、良い一般的な仮定ではありません。
ssh
常に複数のリモートサーバー上の複数のインスタンスに接続しますが、そのうちのいくつかは直接の積極的な関与なしに接続します。たとえば、Emacs Trampモードでは、ssh
リモートバッファーにアクセスすると、バックグラウンドで接続が開かれます。同様のことを行うユーザー空間ファイルシステムを使用する人もいます。決して珍しいことではありません。実際、単一のユーザー、単一のssh
インスタンスは少数派のフリンジユースケースであると想定します。それがあなたのために働くなら、あなたにとっては良いのですが、それは良い一般的なアドバイスではありません。
ssh多重化を使用する場合、sshプロセスを強制終了することは望ましくないことが多く(そのホストとのすべての開いている接続を強制終了します)、「多重化セッションではエスケープできない」ため、エスケープに簡単にアクセスできません。正しい方法は、キャンセルしたい転送コマンドの類似物を実行することですが、追加し-O cancel
ます。例えば:
ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135
これにより、セッションを終了せずにこのポート転送が無効になります。繰り返しますが、これはssh多重化が192.168.1.135への接続に使用されている場合にのみ機能します。
ssh -O exit 192.168.1.135
。
「エスケープキー」(通常は〜)を使用してからCを押すと、接続のCLIを取得できます。そこから接続を切断せずにトンネルを削除できます。
~C(大文字の「C」)を入力して、インタラクティブコンソールを入力できます。これにより、ポート転送を動的に追加および削除できます(他にもいくつかあります)。
このシーケンスは、復帰/改行の直後に来る必要があります。疑わしいので、単にEnter~C(順番に)入力してください。
コンソールにキャラクターが表示されない場合は、正しく実行しています:)
ssh>
プロンプトが表示されます。
ポートを削除するには、-KL 10002
続けてEnter(10002
転送先ポート)を入力します。
逆(新しい順方向の追加)は、次のように実行できます(開始から終了まで)。
Enter~C
ssh> -L 10002:192.168.0.30:10002
Enter
~C escape not available to multiplexed sessions
ます。その場合は、a3nmの優れた答えをご覧ください。
Warning: remote port forwarding failed for listen port
メッセージを取得する新しいsshセッションを起動すると、ポートがまだ転送されていることにしばしば気付きます。