若要在 SSH 隧道连接中不显示服务器登录 Banner 信息,需服务端修改 sshd_config 配置禁用 Banner 指令,并清理系统级横幅文件,但协议握手阶段的版本号无法完全消除。
先说结论:SSH 隧道模式通常不触发登录 Banner,但协议版本字符串默认可见,需分别配置屏蔽。
- 先判断:确认是登录文本 Banner 还是协议版本字符串泄露。
- 优先做:修改/etc/ssh/sshd_config 禁用 Banner 及版本后缀(注意版本兼容性)。
- 再验证:使用 nc 命令测试端口响应是否包含敏感信息。
- 保安全:重载前务必使用 sshd -t 测试配置,防止锁死远程连接。
版本兼容性检查
在修改配置前,需确认 OpenSSH 版本,部分配置项仅在较新版本中支持,错误配置会导致 sshd 服务无法启动。
# 查看服务端版本信息
sudo sshd -V | grep openssh-version注意:
VersionAddendum仅支持 OpenSSH 8.7 及以上版本,旧版本配置会导致服务启动失败。DebianBanner仅适用于 Debian/Ubuntu 系发行版,其他系统(如 CentOS)配置该项会报错。
分步处理
1. 清理系统级横幅文件
/etc/issue 和/etc/issue.net 常被用于存储登录前提示,默认可能包含内核版本。执行以下命令清空并锁定权限,防止被覆盖:
sudo truncate -s 0 /etc/issue /etc/issue.net
sudo chmod 444 /etc/issue /etc/issue.net2. 配置 SSH 服务端
编辑/etc/ssh/sshd_config 文件,确保以下配置项正确设置。根据版本检查结果选择性添加:
# 不发送文本提示
Banner none
# 禁用 Debian/Ubuntu 系发行版后缀(仅 Debian/Ubuntu 有效)
DebianBanner no
# 移除版本字符串中的附加信息(仅 OpenSSH 8.7+ 有效)
VersionAddendum none3. 检查文件权限
若需启用自定义 Banner 文件(如合规提示),文件必须由 root 所有,权限≤0644,且不能是符号链接或位于/tmp 等不可信目录,否则配置会静默失效。
安全验证与重载
关键步骤:修改配置后,严禁直接重载服务。必须先通过语法检查,防止配置错误导致无法远程连接。
# 1. 测试配置语法
sudo sshd -t
# 若无输出则表示配置正确,若有报错请立即修正
# 2. 重载服务
sudo systemctl reload sshd故障恢复:若配置错误导致 SSH 无法连接,需通过云厂商控制台 VNC、物理终端或 IPMI 登录服务器,还原/etc/ssh/sshd_config 配置文件后重启服务。
怎么验证是否生效
不要仅依赖 SSH 客户端登录界面,应使用底层工具检测协议响应。从另一台机器执行以下命令,观察首行响应:
nc -v your-server-ip 22正常应仅显示类似 SSH-2.0-OpenSSH_9.2p1 的基础版本,无括号内的发行版后缀(如 Debian-xxx)。若仍看到内核版本或发行版名称,检查/etc/issue 文件是否未清空或 sshd_config 未重载。
常见坑
- 权限问题:Banner 指向的文件若权限过严(如 600)或所有者非 root,sshd 会跳过加载且不报错。
- 符号链接:OpenSSH 较新版本默认拒绝符号链接作为 Banner 文件,需使用实体文件。
- MOTD 混淆:登录成功后显示的信息属于 MOTD,由/etc/motd 或 update-motd 控制,与 Banner 配置无关,需单独清理。
- 隧道模式差异:使用 ssh -N 建立隧道时,因不请求 shell,通常不会触发 Banner,但协议版本字符串仍会发送。