![配置 Ubuntu 以允许通过公钥/私钥和 sudo 进行 ssh 登录而无需密码](https://linux22.com/image/615059/%E9%85%8D%E7%BD%AE%20Ubuntu%20%E4%BB%A5%E5%85%81%E8%AE%B8%E9%80%9A%E8%BF%87%E5%85%AC%E9%92%A5%2F%E7%A7%81%E9%92%A5%E5%92%8C%20sudo%20%E8%BF%9B%E8%A1%8C%20ssh%20%E7%99%BB%E5%BD%95%E8%80%8C%E6%97%A0%E9%9C%80%E5%AF%86%E7%A0%81.png)
我正在设置一个新的 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 个字符......