ssh -gでアドレスがすでに使用されていると言うのはなぜですか?

ssh -gでアドレスがすでに使用されていると言うのはなぜですか?

ポート転送を使用してSSH接続を確立し、リモートホストがローカルに転送されたポートに次のように接続できるようにしました。

ssh -g -L 5115:localhost:5115 <server>

次のエラーメッセージが表示されても、接続は正常に機能します。

バインディング:アドレスはすでに使用中です。

どのポートを選択しても、このメッセージが表示されます。接続が正しく機能しているようですが、なぜこのメッセージが表示されるのか疑問に思います。私は何が間違っていましたか?

答え1

注文する:

ssh -g -L 5115:localhost:5115 <server>

ローカルsshプロセスが0.0.0.0ポート5115にバインドされ、転送される接続をリッスンします。受信されるエラーメッセージは、他のプロセスがすでにこのアドレスとポートにバインドされており、ssh操作を実行できないことを示します。

netstatを実行してこれを確認できます。

netstat -an | grep 5115

次の行が表示されることがあります。

tcp4       0      0  *.22                   *.*                    LISTEN

「LISTEN」は、何かが接続を聞いているという意味です。 」.22"はアドレスとポートで、0.0.0.0または"「」は「すべてのインターフェース」を意味します。

ここで選択できるオプションは、ポート5115を使用する別のプログラムを見つけて停止するか、SSHトンネルに別のローカルポートを使用することです。

答え2

Linuxを実行している場合は、rootとして次のコマンドを実行して警告をミュートできます。

エコ1> /proc/sys/net/ipv6/bindv6only

何が起こっているのかは、sshがPF_INETソケットをバインドする[::]:5115前にPF_INET6ソケットをバインドすることです0.0.0.0:5115。 PF_INET6ソケットは2つのプロトコルにバインドされているため、2番目のソケットをバインドしようとすると失敗します。開くとbindv6only、PF_INET6ソケットのIPv4アドレスに触れることができなくなります。

あまり破壊的なアプローチは、4つの引数形式を使用することです-L。ここでは、バインディングアドレスを明示的に指定できます(使用0.0.0.0)。

関連情報