如何配置 SSH 隧道连接时不显示服务器登录 Banner 信息?

文章导读
若要在 SSH 隧道连接中不显示服务器登录 Banner 信息,需服务端修改 sshd_config 配置禁用 Banner 指令,并清理系统级横幅文件,但协议握手阶段的版本号无法完全消除。
📋 目录
  1. 版本兼容性检查
  2. 分步处理
  3. 安全验证与重载
  4. 怎么验证是否生效
  5. 常见坑
A A

若要在 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.net

2. 配置 SSH 服务端
编辑/etc/ssh/sshd_config 文件,确保以下配置项正确设置。根据版本检查结果选择性添加:

如何配置 SSH 隧道连接时不显示服务器登录 Banner 信息?
# 不发送文本提示
Banner none

# 禁用 Debian/Ubuntu 系发行版后缀(仅 Debian/Ubuntu 有效)
DebianBanner no

# 移除版本字符串中的附加信息(仅 OpenSSH 8.7+ 有效)
VersionAddendum none

3. 检查文件权限
若需启用自定义 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,但协议版本字符串仍会发送。