ssh.service 启动失败;端口 22 已被使用

ssh.service 启动失败;端口 22 已被使用

全新 Ubuntu 安装:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal

ssh.service由于端口 22 已被使用,无法启动:

$ sudo service ssh status
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2021-02-04 14:10:27 CST; 11min ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 2041 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
    Process: 2042 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (code=exited, status=255/EXCEPTION)
   Main PID: 2042 (code=exited, status=255/EXCEPTION)

Feb 04 14:10:27 ubu20a systemd[1]: Starting OpenBSD Secure Shell server...
Feb 04 14:10:27 ubu20a sshd[2042]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Feb 04 14:10:27 ubu20a sshd[2042]: error: Bind to port 22 on :: failed: Address already in use.
Feb 04 14:10:27 ubu20a sshd[2042]: fatal: Cannot bind any address.
Feb 04 14:10:27 ubu20a systemd[1]: ssh.service: Main process exited, code=exited, status=255/EXCEPTION
Feb 04 14:10:27 ubu20a systemd[1]: ssh.service: Failed with result 'exit-code'.
Feb 04 14:10:27 ubu20a systemd[1]: Failed to start OpenBSD Secure Shell server.

我看到在端口 22 上监听的唯一内容是1/init

$ sudo netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      101        34051      556/systemd-resolve 
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      0          37066      745/cupsd           
tcp6       0      0 :::22                   :::*                    LISTEN      0          34718      1/init              
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           115        37068      743/avahi-daemon: r 
udp        0      0 0.0.0.0:52172           0.0.0.0:*                           115        37070      743/avahi-daemon: r 
udp        0      0 127.0.0.53:53           0.0.0.0:*                           101        34047      556/systemd-resolve 
udp        0      0 0.0.0.0:631             0.0.0.0:*                           0          39715      822/cups-browsed    
udp6       0      0 :::5353                 :::*                                115        37069      743/avahi-daemon: r 
udp6       0      0 :::39012                :::*                                115        37071      743/avahi-daemon: r 

当我在备用端口(例如端口 2020)上启动ssh.service我想了解并修复(如果可能)端口 22 的当前问题。

笔记

  • Linux 系统管理员不是我的强项,所以如果我忽略了一些非常明显的问题...请直接向对方反映
  • 如果答案是,那么请提供RTFM链接FMTR
  • 我浏览了前十几个建议的“重复”问题,但没有找到任何与这个问题相关的内容

答案1

评论有点长...

我采纳了@steeldriver 的建议并运行了建议的systemctl调用:

$ systemctl -all list-sockets
LISTEN                       UNITS                           ACTIVATES               
... snip ...
/run/udev/control            systemd-udevd-control.socket    systemd-udevd.service   
/run/uuidd/request           uuidd.socket                    uuidd.service           
[::]:22                      tinysshd.socket                 [email protected]      
audit 1                      systemd-journald-audit.socket   systemd-journald.service
kobject-uevent 1             systemd-udevd-kernel.socket     systemd-udevd.service 

有趣的是从底部往上第三行...称为tinysshd监听端口 22 的内容。

我找不到任何关于什么的解释tinysshd(即,似乎不是系统所需的服务)所以我删除了tinysshdsudo apt remove tinysshd)并且能够成功启动该ssh服务:

$ sudo service ssh status
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-02-04 15:14:34 CST; 3s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 3887 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 3888 (sshd)
      Tasks: 1 (limit: 7032)
     Memory: 1.3M
     CGroup: /system.slice/ssh.service
             └─3888 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

Feb 04 15:14:34 ubu20a systemd[1]: Starting OpenBSD Secure Shell server...
Feb 04 15:14:34 ubu20a sshd[3888]: Server listening on 0.0.0.0 port 22.
Feb 04 15:14:34 ubu20a sshd[3888]: Server listening on :: port 22.
Feb 04 15:14:34 ubu20a systemd[1]: Started OpenBSD Secure Shell server.

我还可以看到sshd在端口 22 上的监听:

$ sudo netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
...snip ...
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          66119      3888/sshd: /usr/sbi 
tcp6       0      0 :::22                   :::*                    LISTEN      0          66121      3888/sshd: /usr/sbi 
... snip ...

答案2

尝试通过此命令识别哪个应用程序分配端口:

 sudo lsof -i -P -n | grep LISTEN         

并设计下一步做什么

答案3

另一个想法是,我遇到了同样的问题。当我在路由器上启用 ssh 时,它会自动使用端口 22 来 ssh 到路由器,而且这是不可更改的。我一直无法让 ssh 到计算机工作,直到我意识到创建一个端口触发器,这样另一个端口(例如 2222)就转到该计算机的本地 22,然后我就有了 ssh。

答案4

我正在使用 WSL2 和 Ubuntu 20.04。

我在 kbulgrien 找到了答案Unix StackExchange 是我的问题:它systemd-user-sessions.service没有被自动调用。我想到让它自动运行的唯一方法是添加以下行

ExecStartPost=systemctl start systemd-user-sessions.service

[Service]部分/lib/systemd/system/ssh.service。但我还没有找到一种允许 SSH 服务器自动启动的方法…… :( 我仍然必须通过以下方式手动启动它sudo systemctl start sshd.service

相关内容