在我将 Ubuntu 更新到 20.10 后,我开始遇到 SSH 问题。每次服务在启动时启动或当我使用 手动启动它时systemctl
,它都会出错,说端口已经在使用中(无论我在 上指定哪一个sshd_conf
)。虽然这表明已经有一个 ssshd 实例在运行,但这没有意义,因为systemctl status sshd
返回服务启动失败。如果我nmap
在有问题的主机上执行 ,端口确实是打开的,而且我没有发现其他正在使用它们的应用程序。同一网络中似乎还有另一台计算机使用相同的 IP,这与服务器冲突。我该如何解决这个问题?在这台另一台计算机上运行的 ssh 服务器实例会干扰服务器吗?
更新
输出netstat -lnp | grep :22
:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
输出ss -panetl | grep :22
:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* ino:38210 sk:1c <->
LISTEN 0 128 [::]:22 [::]:* ino:38212 sk:22 v6only:1 <->
答案1
可能是另一个服务或实例绑定到了该端口 - 不清楚具体是哪一个。请运行ss -panetl
并systemctl status
验证,同时向我们显示输出。
答案2
您可以使用旧netstat
程序来查看端口上实际监听的内容:
# netstat -lnp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 639/sshd: /usr/bin/
tcp6 0 0 :::22 :::* LISTEN 639/sshd: /usr/bin/
对我来说,它显示的sshd
是使用它们作为 PID 运行的程序639
。您必须以 root 用户身份运行它才能查看程序的名称(它将以普通用户身份运行,但只会显示您的用户帐户正在运行的程序的名称,而不是系统进程)。
具有相同 IP 地址的另一台机器不会影响您本地机器上的监听端口,但它可能会使实际通过 SSH 进入该机器变得困难,因为发往您计算机的数据包可能会随机发送到另一台机器,从而导致 SSH 连接不断中断或无法连接。