我设置了一个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 了。