![如何使 sudo 命令通过 ssh 运行而无需输入密码?](https://linux22.com/image/728537/%E5%A6%82%E4%BD%95%E4%BD%BF%20sudo%20%E5%91%BD%E4%BB%A4%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%90%E8%A1%8C%E8%80%8C%E6%97%A0%E9%9C%80%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81%EF%BC%9F.png)
我设置了一个ssh
无需密码即可接受的服务器,它对于非特权命令运行良好。
但是,当我尝试运行sudo
命令时,系统仍要求我输入密码:
$ ssh -t [email protected] "ls"
Desktop Documents Downloads Music Pictures Public Templates Videos
Connection to 192.168.1.52 closed.
$ ssh -t [email protected] "sudo ls"
[sudo] password for test:
Desktop Documents Downloads Music Pictures Public Templates Videos
Connection to 192.168.1.52 closed.
$
谷歌搜索似乎表明ssh -t
应该让其sudo
运行而不要求输入密码,但上述情况并非如此。
有什么建议我应该怎么做才能使 sudo 命令正常工作而无需输入密码?
操作系统是CentOS 7.5。
答案1
结合 Torin 和 Michael 的出色评论,
您必须编辑 sudo 配置以允许您想要的命令(可选择包括修饰符)NOPASSWD:
。
请记住:
- 这些是特权文件,因此您需要提升的凭据(root 密码、root ssh 密钥、现有的 sudo 规则...)来部署它。
- 您可以使用
#includedir
指令来包含其他 sudoers 配置的目录,例如/etc/sudoers.d
。然后,您可以将文件(例如您部署的自定义软件包)放入其中。 - 您可以在 ldap 中维护 sudo 规则,而不是在文件中。尽管您可能必须触及所有主机才能更新 nsswitch.conf。请参阅 sudoers.ldap 手册页。
ssh -t
与 tty 分配有关,但这没有直接关系。
答案2
以下命令是将用户添加到 sudoers 的正确方法:
echo "test ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/test
chmod 0440 /etc/sudoers.d/test
现在你可以无需断开连接即可进行 ssh 了。