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

dna*_*agy 2 security linux ssh

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

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

Den*_*ker 5

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

在旧版本的 openssh 中,您可以使用 ForceCommand,但这是身份验证的强制命令,而不是身份验证执行的命令。然而,它确实适用于基于密码和密钥的身份验证。

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

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