Azure Pipelines是否可以使用sudo运行bash命令?
Azure Pipelines是否可以使用sudo运行bash命令?
我正在尝试使用一个makefile编译一些源代码。在makefile中有一堆需要以sudo
运行的命令。\n当我在终端中编译源代码时,一切都很顺利,当第一次运行sudo
命令时,make会暂停等待密码。一旦我输入密码,make会继续执行并完成。\n但是我想在NetBeans中编译这些源代码。所以,我开始了一个项目并告诉netbeans在哪里找到源代码,但是当我编译项目时,它给出了错误:\n
sudo: no tty present and no askpass program specified
\n第一次遇到sudo
命令时。\n我在互联网上查找了这个问题,所有的解决方案都指向一件事:禁用此用户的密码。由于这里涉及的用户是root用户,我不想这样做。\n还有其他解决方案吗?
问题出现的原因是在使用Azure Pipelines时,无法使用sudo命令运行bash命令。解决方法是使用ssh命令并添加-t参数,以强制分配伪终端。具体的解决方法如下:
尝试以下命令:
ssh -t remotehost "sudo <cmd>"
这将消除上述错误。
-t参数表示强制分配伪终端。这可以用于在远程机器上执行任意基于屏幕的程序。更多信息请参见:sudo-no-tty-present-and-no-askpass-program-specified。同时,sudo -A
允许设置一个sudo askpass程序,但我只看到GUI界面。有人知道一个基于终端的askpass程序吗?
更正一下,sudo
的-A
参数不接受参数,而是需要环境变量SUDO_ASKPASS
或者一个sudo.conf
文件。因此,ssh remotehost sudo -A command
仍然有效。对于基于终端的askpass程序,仍然有疑问。
这对我来说不起作用(可能是因为我从脚本中调用ssh),给我一个错误:Pseudo-terminal will not be allocated because stdin is not a terminal.
🙁
这并没有回答问题。
问题:Azure Pipelines中是否可以使用sudo运行bash命令?
原因:使用sudo运行bash命令需要在sudoers文件中进行配置,但是在配置过程中可能会出现一些问题。
解决方法:
1. 在sudoers文件中使用NOPASSWD
行配置所有命令,例如:jenkins ALL=(ALL) NOPASSWD: ALL
。
2. 将该行放置在sudoers文件的所有其他行之后。
3. 将新的配置行放置在已存在的配置行之后,以确保新配置行具有优先级。
需要注意的是,在sudoers文件中将配置行放置在最后一行才能生效,即使在Ubuntu 16.04上也是如此。此外,为jenkins用户赋予sudo权限可能存在安全风险,建议将jenkins脚本进行封装,并且只授予特定命令的访问权限,例如:jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
。
以上是关于在Azure Pipelines中使用sudo运行bash命令的原因和解决方法的整理。希望对大家有所帮助。
问题的出现原因是在Azure Pipelines中运行bash命令时,需要使用sudo权限,但是没有sudo权限,导致无法运行命令。解决方法是通过修改sudoers文件,授予用户在不提示输入密码的情况下使用特定命令的权限。
具体的解决步骤如下:
1. 打开一个shell控制台,输入命令sudo visudo
以编辑sudoers文件。
2. 在文件的末尾添加以下内容:username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
,其中username是用户的名称,/fullpath/to/command是需要授权的命令的完整路径。
3. 保存文件并退出。
需要注意的是,编辑sudoers文件时要谨慎操作,因为损坏该文件可能会导致严重后果。
如果没有sudo权限,可以考虑在/etc/sudoers.d目录下添加文件,并保持visudo文件不变。
如果希望以编程的方式实现此操作,可以参考下面的答案,向sudo命令添加-S
标志。
然而,需要注意的是,使用NOPASSWD
选项可能存在安全风险,因此解决缺少tty的问题可能更为明智。添加密码不是解决此问题的方法,错误本身才是问题。
,通过修改sudoers文件并授予用户特定命令的sudo权限,可以解决在Azure Pipelines中使用sudo运行bash命令的问题。但是需要谨慎操作,以免造成安全风险。