【教程】改不了 SSH 端口怎么办?一文了解 ssh.socket

各位在玩机过程中可能会碰到一些奇怪的问题,例如 ByteVirt 家的小鸡修改 /etc/ssh/sshd_config 的 SSH 端口配置不会生效。我们编辑好 sshd_config 后重启 SSH ,执行 systemctl status sshd.service 会看到下面的效果:

* ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-01-14 11:34:43 UTC; 3s ago
TriggeredBy: * ssh.socket
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 4820 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 4821 (sshd)
      Tasks: 2 (limit: 19660)
     Memory: 2.8M
        CPU: 57ms
     CGroup: /system.slice/ssh.service
             |-4794 "sshd: [accepted]"
             `-4821 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Jan 14 11:34:43 xxx systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Jan 14 11:34:43 xxx systemd[1]: ssh.service: Found left-over process 4794 (sshd) in control group while starting unit. Ignoring.
Jan 14 11:34:43 xxx systemd[1]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
Jan 14 11:34:43 xxx sshd[4821]: Server listening on :: port 22.
Jan 14 11:34:43 xxx systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

我们一眼发现 Server listening on :: port 22. 还是在监听 22 端口,没有生效。 

这是怎么回事呢?我们来对比以下普通机器的日志:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-01-14 06:42:21 EST; 3s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 2496 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 2498 (sshd)
      Tasks: 1 (limit: 1025)
     Memory: 1.4M
        CPU: 21ms
     CGroup: /system.slice/ssh.service
             └─2498 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Jan 14 06:42:21 xxx systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Jan 14 06:42:21 xxx sshd[1498]: Server listening on 0.0.0.0 port 11451.
Jan 14 06:42:21 xxx sshd[1498]: Server listening on :: port 11451.
Jan 14 06:42:21 xxx systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

仔细一看,最大的差别在于,第一台机子是 TriggeredBy: * ssh.socket 的!
此乃何物?这是较新的发行版启用的特性。以前,我们的 SSH 服务是由 sshd 程序持续监听 TCP 端口,等待我们连接;新的方式则是由 systemd 管理这个监听端口,在探测到有发起的连接时,再拉起 sshd 进行处理。

这有什么好处?最大的好处就是节约内存,因为后台不再需要一直运行 sshd ,从而能获得闲时可达 5% 的内存节约。这种白嫖内存的好事,难怪卖 LXC 容器的商家会这么积极地采用呢。 xhj004

所以怎么办?

方法一:禁用 ssh.socket

systemctl disable --now ssh.socket
systemctl restart sshd.service

执行上述命令后就会发现端口更改生效了 

方法二:更改 ssh.socket 配置

ssh.socket 的配置文件在 /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

改完后执行:

systemctl daemon-reload
systemctl restart ssh.socket
systemctl restart ssh.service

我也想节约内存怎么办

很简单,只需要启用 ssh.socket 即可

systemctl enable --now ssh.socket

希望对大家有所帮助 

© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发

    暂无评论内容