禁用每个用户通过密码进行的 SSH 登录?

禁用每个用户通过密码进行的 SSH 登录?

我询问过一些网络托管服务提供商(Bluehost 和 Dreamhost),他们都说在共享托管帐户上,他们无法禁用使用密码通过 SSH 登录。这意味着,即使我们设置了 SSH 密钥,不使用密钥并通过托管密码登录也将始终可用,这几乎抵消了密钥的大部分优势。

据我在网上找到的信息,编辑/etc/ssh/sshd_config是禁用通过密码登录的方法,但由于它是共享主机,所以这是不可能的。

尽管如此,他们从未声称无法做到这一点(尽管我还没有找到方法),只是他们不支持它。有没有办法根据每个用户来做到这一点,以便我可以自己设置?如果没有,为什么不行,SSH 工作方式中的(技术/设计)限制是什么阻止了它?

答案1

[有没有办法] 禁用每个用户通过密码进行的 SSH 登录?

不是,一般来说。

SSH 工作方式中的(技术/设计)限制是什么,阻碍了这一点?

SSH 协议设计或规范中没有提到如何防止这种情况发生。

这是 SSH 守护进程(或服务)中特定于实现的限制

Linux(等)平台上的常用sshd程序被编写为读取适用于该程序实例的所有用户的单个配置文件。

我认为可以编写一个 SSH 守护程序,用于在用户主目录中查找补充配置文件(例如)。但是这还没有实现(可能是需求不足)


有没有什么大致相当的东西?

您可以做的是将用户的登录密码设置为一些极长且完全随机的字符串。

可以使用 shell 设置密码,其中包含攻击者可能使用的 SSH 客户端无法输入的字符。或者至少设置一个比他们可能使用通常的基于字典的方法尝试的密码长得多的密码。

答案2

SSH 确实支持此功能,而且实现起来非常简单 - 正如其他人所说,它需要提供商的合作。您可以通过设置没有有效密码的用户帐户来实现这一点(在我的发行版中,您可以通过在 adduser 上多次输入密码失败来实现这一点,但您始终可以编辑 /etc/shadow 并将加密密码更改为“*”或“!” - 因为许多帐户已经设置好了。

第二步是在authorised_hosts中安装你的公钥——这样就不需要ssh检查你的密码来授予你访问权限了。

答案3

使用 OpenSSH 服务器,要禁用每个用户的密码验证,您可以将这些行添加到sshd_配置文件:

Match user someuser
PasswordAuthentication no

请参阅sshd_config 手册详情请见。编辑 sshd_config 后,请务必重新启动 sshd。

相关内容