各位在玩机过程中可能会碰到一些奇怪的问题,例如 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 容器的商家会这么积极地采用呢。
所以怎么办?
方法一:禁用 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
暂无评论内容