今日、私はvncへのSSHトンネリングに関連する小さな問題を解決しようとしました。考えられる問題の1つは、他の誰かがすでにそのポートにトンネリングしていることです。問題の具体的な詳細を扱わなくても、SSHトンネルがリソースを割り当てる方法とリソースを表示する方法を理解していないことに気付きました。
だから、2つの質問があります。まず、SSHトンネルを作成してもトンネルが現在使用されていない場合(つまり、私のローカルシステムのいずれもトンネルポートに接続されていない場合)、どのポートが現在ブロックされていて他のポートで使用できないのですか?私のソースポートは私のトンネルの所有であるため、他のアプリケーションによってバインドできないと確信しています。しかし、ターゲットポートはどうですか?ポートはすでにトンネルにバインドされていますか?または、ローカルポートへの接続を試み、接続がSSHトンネルを介して宛先ポートに移動したときにのみバインドされますか?
第二に、私のシステムにどのSSHトンネルがあるのかをどうやって確認しますか?ローカルでトンネルを作成する場合は、適切なプログラムに対してpsとgrepを実行できますが、クライアントが自分のサーバーポート用のローカルトンネルを生成するようにすることで、クライアントが存在しなくてもサーバーにそのトンネルが存在することを確認できます。ありますか?まだトンネルを介してプログラムに接続されていますか?
ベストアンサー1
netstat
およびlsof
/またはどのポートが何によって開かれているかを確認するための一般的なプログラムですfuser
(ただし、root
これらのアクセスはUnixの特性によって必要になる可能性があります)。宛先ポートを共有するだけです。関連するシステムコールを理解するために、Beejのネットワーキングガイドを見ておくと便利です。
クライアントがまだ接続されていない場合、クライアントが設定したポートはバインドされません。これは、接続が確立されたときにのみ発生するためです。 (例外:接続の終了TIME_WAIT
などによりポートが遅れることがあります。)