我有一个 shell 脚本,它创建一个用户并以该用户身份执行另一个脚本
sudo useradd -m devops sudo passwd devops sudo adduser devops sudo su - devops -c "sh /path/to/myscript.sh"
此脚本创建用户、设置密码并按预期将用户添加到 sudo 组。
- myscript.sh 包含使用 sudo 权限的命令。 (sudo apt-get update、sudo apt-get install software-properties-common 等)。以及其他命令,如 ssh-keygen、curl 和 wget。
- 除了带有 sudo 的命令之外的所有命令都可以正确执行并产生异常结果。
- 但是具有 sudo 的命令会失败,并给出错误“不存在 tty 且未指定 Askpass 程序”
- 为什么会出现这种情况?我该如何克服这个问题?
- 我见过类似的问题,但如果我能在这方面得到明确的解释,我将不胜感激,谢谢。
最佳答案
尝试替换这个:
su - devops -c "sh /path/to/myscript.sh"
这样:
sudo -u devops -H sh -c "sh /path/to/myscript.sh"
su
的 -c
选项不支持交互模式:
-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.The executed command will have no controlling terminal. This option cannot be used to execute interractive programs which need a controlling TTY.
(man su
)
顺便说一句,我不会在脚本中到处使用sudo
。该脚本可能只需要 root
权限。在脚本中,您可以在必要时通过上述 sudo
命令删除权限。
关于linux - shell脚本在尝试执行sudo命令时给出 "sudo: no tty present and no askpass program specified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022551/