新手配置linux ssh欢迎banner并隐藏内核版本需分两步:先清空/etc/issue和/etc/issue.net以去除登录前内核信息,再在sshd_config中启用banner /etc/issue.net并设置debianbanner no(debian/ubuntu),最后关闭printmotd、printlastlog、usedns等泄露项,reload sshd后用nc验证协议响应是否仅剩ssh-2.0-openssh_9.2p1。

新手配置Linux SSH欢迎Banner并隐藏内核具体版本,核心是区分两个层面:登录前显示的横幅(Banner)和协议握手时暴露的服务标识(如SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2)。前者可直接通过配置文件修改,后者需额外设置才能收敛。对新手来说,优先完成 Banner 清理 + 基础服务标识精简,已能显著降低信息泄露风险。
一、清空或简化 /etc/issue 和 /etc/issue.net
这两个文件控制终端登录前、以及部分网络服务(如SSH未认证阶段)显示的系统信息,常含\r(内核版本)、\s(系统名)、\v(Debian版本)等转义符,会直接暴露内核版本(如“5.10.0-29-amd64”)。
- 用命令一键清空并设只读:
sudo truncate -s 0 /etc/issue /etc/issue.net && sudo chmod 644 /etc/issue /etc/issue.net - 如果想保留简洁提示(比如法律声明),可手动编辑
/etc/issue.net:
sudo nano /etc/issue.net,写入纯文本,例如:
Authorized access only. Unauthorized use is prohibited.
⚠️ 不要加任何\r、\m等转义字符,也不要用中文或特殊符号
二、启用并指向自定义 Banner(SSH 登录前横幅)
OpenSSH 的 Banner 指令控制未认证用户连接后看到的第一行提示,它不显示内核信息,但能覆盖默认行为。关键点:路径必须存在、可读、不能是软链接。
- 编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config - 确保以下两行取消注释且值正确:
Banner /etc/issue.net
DebianBanner no(仅 Debian/Ubuntu 系统需要,禁用发行版后缀) - 保存后重载服务(不中断已有连接):
sudo systemctl reload sshd
三、关闭可能泄露内核/系统信息的其他选项
有些配置项虽不直接显示内核号,但会间接暴露环境特征,一并关闭更稳妥:
-
PrintMotd no:防止显示
/etc/motd,该文件有时被脚本自动写入系统信息 - PrintLastLog no:避免登录后显示“Last login: …”,其中可能含主机名或IP,间接关联内核部署环境
- UseDNS no:禁用反向DNS查询,防止因解析失败日志中暴露主机名或内核相关域名
- 改完记得再次执行 sudo systemctl reload sshd
四、验证是否生效(重点看协议层)
别只看登录界面——攻击者用nc -v IP 22或telnet IP 22就能拿到原始响应。正确结果应类似:
即:保留协议标识和主版本号(无法也不建议彻底删除),但去掉了Debian-2+deb12u2这类发行版与内核构建信息。
- 本地测试命令:
nc -w1 localhost 22 2>/dev/null | head -n1 - 若仍看到内核或发行版字样,检查
/etc/issue是否真为空、sshd_config里DebianBanner是否拼写正确、服务是否 reload 而非 restart











