Ubuntu 配置 sudo 时不需要输入密码

此方法在 Ubuntu 18.04 中测试通过,其他 Linux 版本仅供参考。

最近在配置 jenkins 中执行需要 sudo 权限才能进行的操作时会报错:no tty present and no askpass program specified。因为 sudo 时需要输入密码,而 CI 任务执行时并没有可供输入密码的 TTY 环境。

解决这个问题最简单的方式当然是配置 sudo 时不用输入密码。网上搜了很多相关的教程,但并没有起作用(后来发现是代码位置的问题)。这里把相关的操作简单整理一下。

sudo 相关的配置位于 /etc/sudoers 文件内。但这个文件不建议直接编辑,而是使用以下命令:

sudo visudo

该命令会打开默认的编辑器编辑 /etc/sudoers 文件,并在保存时自动检查文件格式并设置到正确的文件权限。

进入编辑状态后,在文件最后面(划重点:一定是在文件最后面)添加以下内容:

jerry   ALL=(ALL) NOPASSWD: ALL

解释一下:jerry 是我的登录用户名,根据需要改成自己的用户名即可。NOPASSWD 表示不需要输入密码,后面的 ALL 表示所有命令。也就是说,jerry 用户在执行 所有的 sudo 命令时均不需要输入密码。如果要设置指定命令无需输入密码,只需要把最后面的 ALL 替换为具体命令即可(详见文章最后的参考文档)。

如果要针对用户组设置规则,只需在组名前添加 % 即可,如(jerry 为用户组的名字):

%jerry   ALL=(ALL) NOPASSWD: ALL

重点:之前查了很多文档各种尝试均未生效,最后得知自己添加的内容 一定 要放到文件最后,否则是不生效的。

Tips: /etc/sudoers 文件最后面有一行 #includedir /etc/sudoers.d,也可以把注释取消掉,并把自己的规则写到 /etc/sudoers.d 目录中,文件名任意。

原文地址:https://icewing.cc/post/no-passwd-when-sudo-in-ubuntu.html

参考文档:

  • https://stackoverflow.com/questions/37603621/jenkins-sudo-no-tty-present-and-no-askpass-program-specified-with-nopasswd
  • https://stackoverflow.com/questions/21659637/how-to-fix-sudo-no-tty-present-and-no-askpass-program-specified-error/24648413#24648413
暂无评论