在尝试执行sudo命令时,shell脚本给出“sudo:no tty present并且没有指定askpass程序”

时间:2016-05-04 08:39:23

标签: linux bash shell ubuntu

  • 我有一个shell脚本,用于创建用户并以该用户

    执行另一个脚本
    sudo useradd -m devops
    sudo passwd devops
    sudo adduser devops sudo  
    su - devops -c "sh /path/to/myscript.sh"
    
  • 此脚本创建用户,设置密码并按预期将用户添加到sudo组。

  • myscript.sh包含使用sudo previlages的命令。 (sudo apt-get update,sudo apt-get install software-properties-common etc.)。以及其他命令,如ssh-keygen,curl和wget。
  • 除了sudo之外的所有命令都正确执行并生成结果为例外。
  • 但有sudo的命令失败,错误是“没有tty存在且没有指定askpass程序”
  • 为什么在这种情况下会发生这种情况,我该如何克服这个?
  • 我看到过类似的问题,但如果我在这方面得到明确的解释,我将非常感谢,谢谢。

1 个答案:

答案 0 :(得分:3)

尝试替换它:

su - devops -c "sh /path/to/myscript.sh"

用这个:

sudo -u devops -H sh -c "sh /path/to/myscript.sh"

-c的{​​{1}}选项不支持交互模式:

  

su指定将被调用的命令   shell使用-c。

     

执行的命令没有控制终端。这个选项   不能用于执行需要a的交互式程序   控制TTY。

-c, --command COMMAND

顺便说一句,我不会在脚本中使用man su。该脚本可能只需要sudo权限。在脚本中,您可以通过上述root命令在必要时删除权限。