5

Brand new ubuntu installation:

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

ssh.service fails to startup due to port 22 already in use:

$ 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.

Only thing I see listening on port 22 is 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 

While I can get ssh.service to startup on an alternate port (eg, port 2020) I'd like to understand, and fix (if possible), this current issue with port 22.

NOTES:

  • linux sysadmin is not my strong point so if I'm missing something stupidly obvious ... go ahead and shoot the messenger
  • if the answer is RTFM then a link to which FMTR would be appreciated
  • I looked through the first dozen or so suggested 'duplicate' questions but didn't find anything applicable to this issue
2
  • The output of systemctl -all list-sockets may provide some additional diagnostics, as suggested here Why is init listening on port 80? – steeldriver Feb 4 at 20:59
  • @steeldriver that was a big help; if you want to write up an answer I'll more than gladly accept your answer; in the meantime I'll post an answer with more details ... for future references; thanks again! – markp-fuso Feb 4 at 21:25
4

A bit long for a comment ...

I took @steeldriver's suggestion and ran the suggested systemctl call:

$ 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                 tinysshd@0.service      
audit 1                      systemd-journald-audit.socket   systemd-journald.service
kobject-uevent 1             systemd-udevd-kernel.socket     systemd-udevd.service 

Of interest is the 3rd line up from the bottom ... something called tinysshd listening on port 22.

I couldn't find any explanation for what tinysshd does (ie, doesn't appear to be a system required service) so I removed tinysshd and was able to successfully start the ssh service:

$ 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.

I can also see sshd listening on port 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 ...
0

try to identify which app allocate port via this command:

 sudo lsof -i -P -n | grep LISTEN         

and make design what to do next

0

Another thought as I was having the same issue. When I enabled ssh on my router it automatically took port 22 for ssh to the router and that wasn't changable. I could never make ssh to a computer work until I realized make a port trigger so another port say for example 2222 went to 22 local of that computer and voila I had ssh.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.