sshd 横幅中的非 ASCII 可打印字符

Fir*_*Fly 9 colors ssh unicode

可以通过in 配置在打开连接时sshd显示的横幅。请注意,这会身份验证发生之前显示,即使未启动交互式 shell(例如,通过)。Banner /etc/motd.sshsshd_configscp

但是,如果此横幅包含可打印 ASCII 范围之外的字符,则它们似乎已被转义。有什么方法可以禁用这种转义,或者在支持可打印 ASCII 范围之外的此类字符的连接上将文本输出发送回客户端的替代方法?

这对于颜色转义序列和 Unicode 字符都很有用。

  • 相关:彩色 ssh 横幅(不是重复的,因为这个问题是关于另一种横幅,而不是颜色)

slm*_*slm 9

提及 #1 - LinuxFromScratch 项目

它提到的一个地方是在 Linux From Scratch 项目中。我发现这个页面的标题是:/etc/issue (Customizing your login)

摘抄

/etc/issue 文件是一个纯文本文件,它也接受某些转义序列(见下文)以插入有关系统的信息。还有文件 issue.net 可以在远程登录时使用。但是,ssh 只会在您在配置文件中设置该选项时使用它,并且也不会解释下面显示的转义序列。

提及 #2 - SecurityFocus 论坛帖子

作为证明这是不可能的,还有来自论坛帖子的摘录:Re: ssh and banners Aug 18 2009 01:20PM,讨论了在 OpenSSH 中实现横幅打印的功能。

摘抄

进一步挖掘之后,我发现 ssh 源(特别是 sshconnect2.c)中有一个名为“input_userauth_banner”的函数,用于显示来自服务器的横幅。横幅的文本现在通过另一个名为“strnvis”的函数进行过滤,该函数将不可打印的 ascii 字符编码为可打印的文本,即:八进制代码。这就是 ansi 转义序列显示为“\033[”的原因。strnvis 的文档没有提到任何安全问题,只有可能与不可打印字符相关联的“意外行为”。

提及 #3 - OpenSSH 发行说明 + RFC

最后,我鼓励您查看 OpenSSH 的发行说明。它们以及管理 SSH v1 和 v2 规范的 RFC 都在这里。

RFC 涵盖了该Banner功能的一些行为。本节“5.4. 横幅消息”详细介绍了为什么不允许这样做。这一段是说这是明确不允许的。

摘抄

如果显示“消息”字符串,则应使用 [SSH-ARCH] 中讨论的控制字符过滤来避免通过发送终端控制字符来进行攻击。

其他参考(每@hildred)