如何在Debian 12中禁用MOTD?
如何在Debian 12中禁用MOTD?
我完全懂你改了sshd_config后MOTD还蹦出来的烦恼——Debian 12的MOTD可不是只靠SSH配置控制的,它是由系统层面几个组件共同生成的。别担心,我给你捋清楚所有环节,还有能直接加到部署脚本里的命令,以后新服务器一键搞定,不用逐个手动改。
首先,先确认你SSH那边的配置是不是真的生效了:虽然你改了sshd_config,但如果没重启sshd服务,新配置不会生效。不过就算SSH的MOTD关了,系统本身的动态MOTD还是会跳出来,这才是核心问题。
Debian的动态MOTD主要靠这几个部分:
pam_motd模块:登录时触发MOTD的显示/etc/update-motd.d/目录下的脚本:自动生成动态内容(比如系统信息、更新提示这些)/etc/motd默认是链接到动态生成的文件,每次登录都会被覆盖
下面是分步骤的禁用方法,以及适合自动化脚本的一键命令:
一、彻底禁用所有MOTD的自动化命令
你可以把这段命令直接加到你的Vultr部署脚本里,执行一次就搞定:
# 1. 配置SSH不打印MOTD和最后登录信息 sed -i 's/^PrintMotd yes/PrintMotd no/' /etc/ssh/sshd_config sed -i 's/^PrintLastLog yes/PrintLastLog no/' /etc/ssh/sshd_config # 2. 重启sshd让SSH配置生效 systemctl restart sshd # 3. 将动态MOTD链接替换为空白静态文件 rm -f /etc/motd && touch /etc/motd # 4. 注释PAM模块中调用motd的行,禁用登录时的MOTD触发 sed -i '/pam_motd.so/s/^/#/' /etc/pam.d/sshd sed -i '/pam_motd.so/s/^/#/' /etc/pam.d/login # 5. 禁用update-motd.d目录下所有脚本的执行权限,阻止动态内容生成 chmod -x /etc/update-motd.d/*
二、各步骤的作用说明(可选查看)
- 关于SSH的
PrintMotd和PrintLastLog:后者控制的是“最后一次登录时间”的提示,很多人会把它当成MOTD的一部分,所以一起关掉更彻底。 - 替换
/etc/motd为空白文件:默认它是链接到/var/run/motd.dynamic,这个文件是由update-motd.d的脚本生成的,改成空白静态文件后就不会再被动态内容覆盖。 - 注释PAM里的
pam_motd.so:这个模块负责在登录(不管SSH还是本地)时读取并显示MOTD,注释掉后就不会触发这个行为了。 - 去掉
update-motd.d脚本的执行权限:就算PAM没关,这些脚本没权限运行的话,也生成不了动态MOTD内容。
这样操作后,不管是通过SSH登录还是本地登录,都不会再看到MOTD了,完全符合你部署脚本自动化的需求。
备注:内容来源于stack exchange,提问作者themegamenuguy99




