此方法在 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
目录中,文件名任意。
参考文档:
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。