配置 Ubuntu 以允许通过公钥/私钥和 sudo 进行 ssh 登录而无需密码

配置 Ubuntu 以允许通过公钥/私钥和 sudo 进行 ssh 登录而无需密码

我正在设置一个新的 Ubuntu 13.04 服务器。我创建了一些用户并将他们的公钥复制到他们的主文件夹中以进行 ssh 身份验证。通过密码登录将被禁用。到目前为止一切正常,但如果我通过 ssh + 私钥登录,则无法使用 sudo。我必须输入密码,但所有密码都是空的。

我发现了一些关于如何更改 /etc/sudoers 的提示,但也有很多警告不要手动编辑该文件。所以我的问题是:

  • 仅使用公钥/私钥验证而不使用密码是否安全?
  • 配置此行为的正确方法是什么?

答案1

您实际上谈论的是两件不同的事情。配置 SSH 仅进行基于密钥的身份验证是 sshd 配置的一部分,而 sudo(无密码或无密码)由 pam 处理。您真正应该做的是:

配置 SSHD 以仅允许 SSH 密钥验证

编辑您的/etc/ssh/sshd_config修改和/或根据需要添加以下内容

PubkeyAuthentication yes
PasswordAuthentication no

然后重新启动sshd服务。

配置 sudo

您需要选择您的 sudo 组并修改 sudoers 文件,使用命令visudo并添加类似这样的内容。

%wheel   ALL=(ALL)       ALL

这将允许 wheel 组中的每个人以任何用户身份执行任何命令。请注意,他们需要输入密码才能执行此操作。默认情况下,大多数发行版都要求他们输入自己的密码,但有时 sudo 配置为要求他们输入目标密码。

或者,你可以将 sudo 配置为根本不要求输入密码。我不建议这样做,除非服务帐户执行自动操作。在这种情况下,你可以指定仅有的服务帐户可以执行仅有的特定命令。但是,你完全可以通过将上面的行更改为以下内容来删除 sudo 密码要求:

%wheel  ALL=(ALL)  NOPASSWD: ALL

答案2

为什么密码是空的?您可以禁用 SSH 中的密码验证,并保留密码以进入 sudo。要禁用 SSH 中的密码验证,请编辑 /etc/ssh/sshd_config 并激活PasswordAuthentication no

密钥交换比密码安全得多:有 2048 个字节可以代替 5-10 个字符......

相关内容