步骤 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
为第一个命令(无响应)提供的选项的效果是,当命令成功时,没有反馈:
因此,第一个命令没有可见的结果,但确实按预期工作:设置隧道以转发端口 8888,而没有其他内容(可见)。
第二个命令仅部分成功:它仍然在后台运行第二个远程 SSH 连接,但无法转发再次相同的端口:之前的命令已经完成了。因此,它对此进行了抱怨。这种不创建隧道并且不允许任何命令的SSH命令只是浪费资源。
哪些方面还可以做得更好?这取决于目标。但是为了防止浪费资源,可以简单地做的是通过使用附加选项来强制无法建立所请求隧道的 SSH 命令完全失败-o ExitOnForwardFailure=yes
::
指定如果 ssh(1) 无法设置所有请求的动态、隧道、本地和远程端口转发,是否应终止连接,[...]
所以最后你应该运行一次,但是除了收到错误消息之外,多次尝试并不是一个真正的问题:
ssh -N -f -o ExitOnForwardFailure=yes -L 8888:localhost:8888 -p 5000 [email protected]
在此命令成功之前,应首先终止先前运行的 ssh 命令(OP 运行了至少其中两个):其中一个命令实际上绑定到端口 8888,并将阻止此命令成功。
在 Linux 上,可以使用以下命令找到它们的 PID ss
:
ss -tnp dst == destination.com and dport == 5000
这样他们就可以用命令杀死kill
。