空のポートでのポート転送。ただし、「ポートで受信できません」とポートがいっぱいです。

空のポートでのポート転送。ただし、「ポートで受信できません」とポートがいっぱいです。

ステップ1。ポートの確認

netstat -tnlpa
(No info could be read for "-p": geteuid()=1000 but you should be root.)  
Active Internet connections (servers and established)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 127.0.0.1:6443          0.0.0.0:*               LISTEN      -  
tcp6       0      0 :::8080                 :::*                    LISTEN      -  

ステップ2。 SSHをお試しください。

ssh -N -f -L 8888:localhost:8888 -p 5000 [email protected]
> No response.  

ステップ3。 SSH再試行

ssh -N -f -L 8888:localhost:8888 -p 5000 [email protected]
bind [127.0.0.1]:8888: Address already in use  
channel_setup_fwd_listener_tcpip: cannot listen to port: 8888  
Could not request local forwarding.  

ステップ4。ポートの確認

netstat -tnlpa 
(Not all processes could be identified, non-owned process info  
 will not be shown, you would have to be root to see it all.)  
Active Internet connections (servers and established)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 127.0.0.1:6443          0.0.0.0:*               LISTEN      -  
tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      228/ssh  
tcp        0      0 172.23.246.199:46180    20.194.107.22:5000      ESTABLISHED 228/ssh  
tcp        0      0 172.23.246.199:46182    20.194.107.22:5000      ESTABLISHED 230/ssh  
tcp6       0      0 :::8080                 :::*                    LISTEN      -  
tcp6       0      0 ::1:8888                :::*                    LISTEN      228/ssh  

ローカル: WSL2 LTS 20.04
サーバー: AzureVM LTS 18.0X


不足している英語力とコンピュータサイエンスの知識のために十分に説明することができませんでした。
追加情報が必要な場合はお答えします。

答え1

最初のコマンド(応答なし)で提供されるオプションの効果は、コマンドが成功したときにフィードバックがないことです。

  • -N処置: リモートコマンドを実行しないでください。ポートを転送する場合にのみ便利です。
  • -f:認証ステップ(存在する場合)が終了すると、sshコマンドはバックグラウンドに移動します。

したがって、最初のコマンドには目立つ結果はありませんが、期待どおりに機能します。つまり、ポート8888を転送するようにトンネルを設定し、他のものは表示されません。

2番目のコマンドは部分的にのみ成功しました。まだバックグラウンドで2番目のリモートSSH接続を実行しますが、転送することはできません。再び同じポート:前のコマンドが完了しました。だからそれについて文句を言った。トンネルを生成せずにコマンドを許可しないこのSSHコマンドは、リソースの無駄です。


何がうまくできますか?目標によって異なります。ただし、リソースの浪費を防ぐために簡単に実行できるのは、追加のオプションを使用して、要求されたトンネルを確立できないSSHコマンドが完全に失敗するように強制することです-o ExitOnForwardFailure=yes

ssh(1)がすべての要求に対して動的、トンネリングされたローカルおよびリモートポート転送を設定できない場合に接続を終了するかどうかを指定します。 [...]

したがって、最終的に一度実行する必要がありますが、エラーメッセージが表示される以外に何度も試すことは実際には問題になりません。

ssh -N -f -o ExitOnForwardFailure=yes -L 8888:localhost:8888 -p 5000 [email protected]

このコマンドが成功する前に、以前に実行されたsshコマンドを最初に終了する必要があります(OPは少なくとも2つを実行しました)。そのうちの1つは実際にポート8888にバインドされ、このコマンドが成功しないようにします。

Linuxでは、以下を使用してPIDを見つけることができますss

ss -tnp dst == destination.com and dport == 5000

このようにして、彼らは命令に従って殺されるかもしれませんkill

関連情報