sshd 的自定义错误消息

sshd 的自定义错误消息

是否可以为被拒绝访问服务器的用户设置自定义错误消息?事实上,我只想在用户因设置的 IP 过滤器而被拒绝时显示此消息sshd_config。但一个全局错误消息就足够了。

答案1

我认为您所说的“错误消息”是指客户端程序显示的文本字符串。“消息”一词在 SSH 身份验证协议 RFC 中有一些上下文,我将在后面引用,但我认为这不是您使用它的含义。

我相信你认为 SSH 类似于 TELNET,其中服务器守护进程发送的任意文本字符串将由客户端显示。SSH 使用身份验证协议在客户端和服务器之间以二进制值的形式来回传递标记化消息。这些标记化消息之一“SSH_MSG_USERAUTH_BANNER”可用于指示客户端显示任意文本字符串(如果它选择显示),但您必须修改 SSH 守护程序以在适当的时间发送这些字符串。我不认为 OpenSSH 具有在身份验证过程中的任意点发送 SSH_MSG_USERAUTH_BANNER 消息的任何内置功能。

我很疑惑,为什么你要向远程攻击者透露身份验证失败的原因。他们知道身份验证失败了,因为他们的 SSH 客户端接收到了来自 SSH 守护进程的标记化消息并做出了反应,表明身份验证失败了。

答案2

编辑:埃文·安德森打字比我快,并且似乎证实该消息在服务器端是不可定制的。

您可以在 中指定横幅文件sshd_config。横幅将在登录提示之前显示给所有用户,并声明只允许来自特定域和地址的登录。

SSH 可以将登录信息传递给 unix/bin/login命令。根据您的操作系统,您可能有一个选项可以自定义提示和错误。

我能想到的其他方法可能意味着编辑代码并重新编译。并且失败消息可能不会以字符串的形式从服务器发送到客户端,而是以代码的形式,以防止攻击者收集信息。(如果它是字符串,并且可以自定义,有人会将其设置为“登录失败。OpenSSH_3.7_p2 21032004”)

答案3

这不专门针对 中的 ip 过滤器起作用sshd_config,但它适用于使用 实现的任何由 PAM 进行的访问控制pam_echo.so

例如:

account [success=2 default=ignore] pam_lastlog.so inactive=30
account optional pam_echo.so file=/path/to/lastlog_error_message.txt
account requisite pam_deny.so
account ...

在这种情况下,如果经过身份验证的用户在过去三十天内没有登录,则/path/to/lastlog_error_message.txt在 SSH 连接关闭之前, 的内容将回显到标准输出。如果他们通过了检查,pam_lastlog则评估将跳过pam_echopam_deny调用以继续评估剩余的 PAM 模块。

相关内容