在 openssh 中,我可以指定每次登录尝试时要执行的命令吗?

在 openssh 中,我可以指定每次登录尝试时要执行的命令吗?

我收到了很多 ssh 登录攻击,想减少它们。有什么方法可以为 openssh 指定一个命令来执行并检查其返回值,并且仅当该命令返回 0 时才允许登录尝试?

这背后的原因是我希望能够拥有更复杂的登录规则,我可以在脚本中表达这些规则,而不是通过简单的基于文件墙/ip 的规则。

答案1

是的,使用足够现代的 openssh 有一个技巧:使用 AuthorizedKeysCommand。此配置选项允许您指定外部命令来检索 SSH 密钥。在这里您可以放置​​逻辑,例如从 LDAP 检索 SSH 密钥,也可以放置您想要的任何其他逻辑。只要您只接受基于密钥的身份验证,不返回任何密钥就会导致身份验证失败。

在旧版本的 openssh 中,你可以使用 ForceCommand,但这是一个强制命令身份验证,而不是执行的命令身份验证。但它可以同时使用基于密码和基于密钥的身份验证。

如果您想要支持基于密码的身份验证并希望插入身份验证阶段,则需要编写自己的 PAM 模块并使其成为 SSH 身份验证所必需的。这不是最简单的方法,并且不会在基于密钥的身份验证中被调用。

如果您想要做的只是阻止身份验证失败次数过多的 IP 地址,fail2ban 也可以帮助您,而无需更改您的 SSH 设置。

相关内容