如何使 sudo 命令通过 ssh 运行而无需输入密码?

如何使 sudo 命令通过 ssh 运行而无需输入密码?

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

相关内容