应精准屏蔽ssh连接初始banner、登录前终端横幅、登录后提示三类输出中的敏感字段。需设debianbanner no、自定义banner文件、清空并只读/etc/issue与/etc/issue.net、禁用printlastlog、清空/etc/motd,并同步加固http等其他服务banner。

新手配置Linux SSH欢迎信息并隐藏操作系统和内核细节,核心是控制三类输出:SSH连接初始Banner、登录前终端横幅、登录后提示。重点不是“完全删光”,而是精准屏蔽敏感字段,避免暴露发行版、内核版本、架构等攻击者可利用的信息。
关闭SSH服务自带的版本标识
OpenSSH默认会在TCP 22端口握手时返回类似 SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2 的字符串,这是最易被nmap、curl等工具直接探测到的入口。
- 编辑
/etc/ssh/sshd_config,确保这两行存在且未注释:
DebianBanner no
Banner /etc/issue.net
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
DebianBanner no禁用OpenSSH内置的发行版标识(如Debian、Ubuntu后缀); -
Banner指向一个你可控的文件,不等于禁用Banner,而是用自定义内容替代默认响应; - 改完必须重启服务:
sudo systemctl restart sshd; - 验证方式:在另一台机器运行
nc -v 你的IP 22,看首行是否只剩SSH-2.0-OpenSSH_*(无发行版)或更干净的内容。
清空或重写 /etc/issue 和 /etc/issue.net
这两个文件控制本地TTY和部分网络服务(如telnet、getty)登录前显示的内容,常含 \r(内核版本)、\m(CPU架构)、\s(系统名)等转义符,极易泄露信息。
- 直接清空并设为只读最稳妥:
sudo truncate -s 0 /etc/issue /etc/issue.net && sudo chmod 444 /etc/issue /etc/issue.net; - 若需保留法律警告,只写纯文本,例如:
WARNING: Unauthorized access prohibited.,切勿使用任何\r、\n、\m; - 注意:修改后需重启getty服务(如
sudo systemctl restart getty@tty1)或重新插拔终端才能生效。
避免登录后泄露信息(/etc/motd 和 lastlog)
虽然不属于SSH连接初期Banner,但登录成功后显示的系统信息(如 /etc/motd)和“上次登录时间”也常带主机名、IP甚至内核线索。
- 检查并清空
/etc/motd:sudo truncate -s 0 /etc/motd; - 禁用“上次登录”提示:在
/etc/ssh/sshd_config中设置PrintLastLog no,再重启sshd; - 对单个用户临时隐藏,可运行
touch ~/.hushlogin,但这不影响全局Banner策略。
额外加固:其他服务的版本暴露也要管住
SSH只是常见入口,HTTP、FTP、数据库等服务同样会返回Banner。虽非SSH范畴,但新手常忽略联动风险:
- Apache/Nginx:设
ServerTokens prod或server_tokens off; - vsftpd:在
/etc/vsftpd.conf中加ftpd_banner=Welcome; - Postfix/Exim:修改
smtpd_banner配置项,去掉版本号; - PHP:确认
php.ini中expose_php = Off已启用。










