web-dev-qa-db-ja.com

ポートフォワーディングを使用しているときにSSHセッションからのログアウトがハングするのはなぜですか?

動的SSHポート転送を使用しています(-D)および通常のSSHポート転送(-Lまたは-R)ワイヤレスWebトラフィックに暗号化のレイヤーを追加するなど、さまざまな目的で使用します。私が使用するコマンドは通常、次のようになります。

ssh -l raam -D 9000 my-linux-server.com

トンネルを開始した後、ポート9000で127.0.0.1のSOCKS v5プロキシを使用するようにWebブラウザーを構成します。これで、ブラウザー内のすべてのトラフィック(DNSを除く)がSSHトンネルを介して送信されます。

トンネルを閉じる準備ができたら(たとえば、ラップトップを別の場所に持っていくとき)、単に「logout」と入力します。ただし、SSHセッションがハングし、を押す必要があります CTRL+c ローカルプロンプトを取り戻すため。

なぜこれが発生し、どうすればそれを防ぐことができますか?

(私の推測では、トンネルを介して開いた接続は開いたままであり、ローカルSSHクライアントは、プロンプトを返す前にそれらが閉じるのを待っています。この場合、どうすればこれらの接続をすべて強制的に閉じることができますか? mログアウトする準備はできましたか?)

5
Raam Dev

予想どおり、これは、トンネルを通過する未処理の接続がある場合にSSHが終了しないために発生します。

ブラウザ(およびポート9000トンネルを通過する他のすべてのプログラム)を終了すると、SSHが終了するはずです。

Sshのmanページには次のように書かれています。

 The session terminates when the command or Shell on the remote machine exits and all X11 and TCP connections have been closed.

そして、その動作を変更するオプションが見当たらないので、あなたにできることは何もないと思います。

17
slacy

SSHをバックグラウンドで実行できます。

<enter>~&
6
Juliano

コメントに記載されているように、-fを使用してトンネルのみの接続を作成できますが、トンネルを使用するすべてのものが終了するまで接続が終了しないという問題が発生します。 〜#オプション(エスケープシーケンスと「ポンド」)を使用して、ログアウトする前に特定の接続で開いている転送された接続を一覧表示できます。

3
Stick