新手配置linux ssh banner并隐藏版本号需四步:一、启用banner /etc/issue.net;二、设debianbanner no;三、用versionaddendum none;四、清空并锁定/etc/issue与/etc/issue.net。

/etc/issue 和 /etc/issue.net 是 Linux 系统在本地终端(TTY)和远程登录(如 telnet、SSH 的 pre-auth banner)前显示的提示信息。清空或自定义它们不难,但容易踩坑:改完没生效、SSH 不显示、甚至被安全策略覆盖。
为什么改了 /etc/issue 却看不到效果?
因为很多发行版默认禁用 issue 在 SSH 登录前的展示——OpenSSH 默认关闭 PrintMotd 和 PrintLastLog,且 /etc/issue.net 仅对未加密协议(如 telnet)生效;SSH 使用的是 /etc/motd 或 banner 配置。
-
/etc/issue只影响本地 TTY(Ctrl+Alt+F1~F6)和 getty 登录界面 -
/etc/issue.net仅被inetd-托管的明文服务读取(现代系统基本不用 telnet,所以它常被忽略) - SSH 完全不读
/etc/issue.net;想让它显示自定义横幅,得配sshd_config的Banner选项 - systemd-based 系统中,
getty@.service可能通过ExecStart=-/sbin/agetty --noclear %I $TERM启动,不带--issue参数时会跳过/etc/issue
清空 /etc/issue 和 /etc/issue.net 的安全做法
直接清空文件内容即可,但要注意权限和 SELinux 上下文(尤其在 CentOS/RHEL、KylinOS 等加固系统上):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 执行
sudo truncate -s 0 /etc/issue和sudo truncate -s 0 /etc/issue.net(比echo "" > file更安全,避免 shell 重定向截断失败) - 确认文件权限仍为
644:sudo chmod 644 /etc/issue /etc/issue.net - 在 KylinOS 或启用 SELinux 的系统上,运行
sudo restorecon /etc/issue /etc/issue.net,否则 getty 可能因上下文错误拒绝读取 - 无需重启服务,但需切换 TTY(如 Alt+F2 → Alt+F1)或重新连接 getty 才能看到变化
自定义 issue 内容并支持转义序列
/etc/issue 支持有限的转义符,比如 \l(tty 编号)、\n(hostname)、\m(机器架构)、\r(内核版本),但这些只在 getty 渲染时解释,不是 shell 变量。
- 写入示例:
sudo sh -c 'echo "Welcome to \n (\r) on \l" > /etc/issue' - 避免使用
\t或\b——多数 getty 实现不支持,可能显示乱码 - 如果含中文或特殊符号,在 UTF-8 环境下确保终端字体支持;KylinOS 默认使用
localectl set-locale LANG=zh_CN.UTF-8,但 issue 渲染依赖控制台字体(如sudo setupcon或修改/etc/default/console-setup) - 不要在 issue 中写长段落或 ANSI 转义色——getty 不解析颜色代码,只会原样输出,破坏提示格式
让 SSH 登录也显示自定义横幅(替代 issue.net)
这是实际中最常被问到却配错的地方。SSH 根本不看 /etc/issue.net,必须显式启用 Banner:
- 编辑
/etc/ssh/sshd_config,取消注释或添加:Banner /etc/ssh_banner - 创建该文件:
sudo sh -c 'echo "SECURITY NOTICE: Unauthorized access prohibited." > /etc/ssh_banner' - 确保权限为
644,且sshd进程能读取(SELinux 下可能需sudo semanage fcontext -a -t sshd_exec_t "/etc/ssh_banner"+restorecon) - 重启服务:
sudo systemctl restart sshd(注意:不是ssh,是sshd) - 验证:用另一台机器
ssh -o LogLevel=DEBUG1 user@host,看到debug1: banner message: ...即生效
真正麻烦的不是改文件,而是搞清哪个组件读哪个路径、是否受 systemd、SELinux、SSH 配置层层拦截。尤其在 KylinOS 这类国产系统上,getty 行为可能被定制,sshd_config 默认还带 PermitRootLogin no 等限制——改完 issue 却发现连登录都失败,往往是因为 banner 文件触发了审计策略误报。










