SSH転送ポートを削除する方法


52

以前ssh -L 10002:192.168.0.30:10002 192.168.1.135はポートフォワーディングを確立していましたが、今では削除する必要があります。

どうすればいいですか?


同じコマンドを再度実行してWarning: remote port forwarding failed for listen portメッセージを取得する新しいsshセッションを起動すると、ポートがまだ転送されていることにしばしば気付きます。
GabLeRoux

回答:


56

Linuxを使用している場合、次の方法でプロセスを強制終了できます。

ps aux | grep ssh

そして使用する

kill <id>

プロセスを強制終了します。

killコマンドが成功しない場合は、試すことができます

kill -9 <id>

31
してください番番番、くださいくださいません使用kill -9あなただけ試した後になるまでkill。多くのプロセスには、リソースの使用をクリーンアップするシグナルハンドラがあり、接続やその他のシャットダウン前タスクをクリーンに閉じます。-9で強制終了すると、プロセスはクリーンアップを実行せずにすぐに終了します。-9なしで殺すことほとんどの場合うまくいきます。
ダグ・ハリス

17
kill -9理由もなく、ショットガンを使って蚊を殺すようなものです。:)
ダレンホール

2
私は通常1つのライナーをしpgrep ssh | xargs killます。-9実際には何も使用しないでください
-GabLeRoux

2
@GabLeRouxこれは、sshコマンドが1つしかないこと、またはssh実行中のすべてのコマンドが正常に終了することを前提としています。これは、良い一般的な仮定ではありません。
トリプリー

2
@Avamander私はssh常に複数のリモートサーバー上の複数のインスタンスに接続しますが、そのうちのいくつかは直接の積極的な関与なしに接続します。たとえば、Emacs Trampモードでは、sshリモートバッファーにアクセスすると、バックグラウンドで接続が開かれます。同様のことを行うユーザー空間ファイルシステムを使用する人もいます。決して珍しいことではありません。実際、単一のユーザー、単一のsshインスタンスは少数派のフリンジユースケースであると想定します。それがあなたのために働くなら、あなたにとっては良いのですが、それは良い一般的なアドバイスではありません。
トリプリー

20

ssh多重化を使用する場合、sshプロセスを強制終了することは望ましくないことが多く(そのホストとのすべての開いている接続を強制終了します)、「多重化セッションではエスケープできない」ため、エスケープに簡単にアクセスできません。正しい方法は、キャンセルしたい転送コマンドの類似物を実行することですが、追加し-O cancelます。例えば:

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135

これにより、セッションを終了せずにこのポート転送が無効になります。繰り返しますが、これはssh多重化が192.168.1.135への接続に使用されている場合にのみ機能します


これが存在することをとてもうれしく思います、そして、私はそれを見つけました、多くの感謝!
ガルバ

2
これが最善の解決策です。マスターを殺すには実行してくださいssh -O exit 192.168.1.135
オリエント

セッションを多重化していない場合は、exhumaの優れた答えをご覧ください!(タイプミスをキャッチしてくれたa3nmに感謝します。)
アランデス

驚くばかり!これが選ばれた答えになるはずです!
チュオングエン

13

すでに実行中のSSHセッションで転送されたポートをキャンセルする方法:

  1. ~+ C(チルダ+大文字のC)を押す
  2. タイプ -KL port
  3. Enterを押す

これが表示されるはずです。

ssh> -KL 10002
Canceled forwarding.

12

「エスケープキー」(通常は〜)を使用してからCを押すと、接続のCLIを取得できます。そこから接続を切断せずにトンネルを削除できます。


1
これの詳細を知りたい。SSHで接続した後トンネルを追加できることは知っていますがトンネルを解除する方法はまだわかりません。
カレスタッド14年

9
CLIモードにいるとき、あなたは助けをすることができます。-KLは-Lの反対、-KRは-Rの反対、-KDは-Dの反対です。「エスケープキー」(〜)に続けて#を実行すると、トンネルが表示されます。
ジミーヘッドマン14年

1
@JimmyHedmanでは、コメントを追加するだけでなく、回答を編集することもできます。すべてが読みやすくなります。また、コメントが隠されている場合があります(多すぎる場合)。
exhuma

7

~C(大文字の「C」)を入力して、インタラクティブコンソールを入力できます。これにより、ポート転送を動的に追加および削除できます(他にもいくつかあります)。

このシーケンスは、復帰/改行の直後に来る必要があります。疑わしいので、単にEnter~C(順番に)入力してください。

コンソールにキャラクターが表示されない場合は、正しく実行しています:)

ssh>プロンプトが表示されます。

ポートを削除するには、-KL 10002続けてEnter10002転送先ポート)を入力します。

逆(新しい順方向の追加)は、次のように実行できます(開始から終了まで)。

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


これは、接続を多重化していない場合の正しい答えです。もしそうなら、あなたはバウンスされ~C escape not available to multiplexed sessionsます。その場合は、a3nmの優れた答えをご覧ください。
アランデス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.