备忘录: 更改/etc/ssh/sshd_config端口不生效的解决方法


问题

今天买了一个新VPS,开心的登录上去修改ssh端口,修改了/etc/ssh/sshd_config内的Port后重启ssh server,但是没有生效,依旧监听22端口。

研究

看一下ssh服务的状态

systemctl status ssh

 ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Tue 2025-10-14 03:39:33 EDT; 9s ago
TriggeredBy: ssh.socket
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 1094 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 1095 (sshd)
      Tasks: 1 (limit: 1141)
     Memory: 1.4M
        CPU: 16ms
     CGroup: /system.slice/ssh.service
             └─1095 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Oct 14 03:39:33 systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Oct 14 03:39:33 sshd[1095]: Server listening on :: port 22.
Oct 14 03:39:33 systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

对比一下我另一台Debian 13的ssh服务状态

systemctl status ssh

 ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Tue 2025-09-23 14:15:58 UTC; 2 weeks 6 days ago
 Invocation:
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 1076 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 1079 (sshd)
      Tasks: 6 (limit: 1130)
     Memory: 133.2M (peak: 325.1M)
        CPU: 11min 9.463s
     CGroup: /system.slice/ssh.service
             ├─ 1079 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
             ├─56815 "sshd-session: root [priv]"
             ├─56824 "sshd-session: root@pts/0"
             ├─56825 -bash
             ├─56830 systemctl status ssh
             └─56831 less

...

观察了一会,似乎这个ssh.socket比较可疑

TriggeredBy: ssh.socket

看一下这个ssh.socket

systemctl status ssh.socket

 ssh.socket - OpenBSD Secure Shell server socket
     Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; preset: enabled)
     Active: active (running) since Tue 2025-10-14 03:11:47 EDT; 28min ago
   Triggers: ssh.service
     Listen: [::]:22 (Stream)
      Tasks: 0 (limit: 1141)
     Memory: 4.0K
        CPU: 312us
     CGroup: /system.slice/ssh.socket

Oct 14 03:11:47 systemd[1]: Listening on ssh.socket - OpenBSD Secure Shell server socket.

看一下/lib/systemd/system/ssh.socket的内容

# file: /lib/systemd/system/ssh.socket

[Unit]
Description=OpenBSD Secure Shell server socket
Before=sockets.target
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Socket]
ListenStream=22
Accept=no

[Install]
WantedBy=sockets.target

看起来这就是修改端口无效的原因

解决

修改/lib/systemd/system/ssh.socket内的ListenStream,重启ssh服务

# edit /lib/systemd/system/ssh.socket
nano /lib/systemd/system/ssh.socket

systemctl daemon-reload
systemctl restart ssh