在openssh中,我可以指定一个命令来执行每个login尝试?

我得到了很多的SSHlogin攻击,并希望减less它们。 有没有什么办法可以指定一个命令openssh来执行并检查其返回值,只允许login尝试,如果此命令返回0?

这背后的原因是,我想能够有更复杂的login规则,我可以在脚本中表示,而不是通过简单的基于filewall / ip的规则。

是的,用一个足够现代的openssh有一个技巧:使用AuthorizedKeysCommand。 这个configuration选项让你指定一个外部命令来检索SSH密钥。 在这里,您可以将逻辑从LDAP中检索SSH密钥,也可以使用您想要的任何其他逻辑。 只要您只接受基于密钥的身份validation,不返回任何密钥将使身份validation失败。

在较旧版本的openssh中,您可以使用ForceCommand,但这是身份validation的强制命令,而不是身份validation之前执行的命令。 但是,它确实可以同时使用基于密码和密钥的authentication。

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

如果您只想阻止身份validation失败的IP地址,fail2ban也可以帮助您,无需更改SSH设置。