尝试执行sudo命令时,shell脚本会显示“sudo: no tty present and no askpass program specified”的错误信息。

12 浏览
0 Comments

尝试执行sudo命令时,shell脚本会显示“sudo: no tty present and no askpass program specified”的错误信息。

我有一个shell脚本,它创建一个用户并以该用户身份执行另一个脚本。\n这个脚本创建用户,设置密码,并将用户添加到sudo组中,正如预期的那样。\nmyscript.sh包含使用sudo权限的命令(如sudo apt-get update,sudo apt-get install software-properties-common等),以及其他命令如ssh-keygen,curl和wget。\n除了带有sudo的命令之外,所有命令都能正确执行并产生预期的结果。\n但是,带有sudo的命令失败,显示错误消息“no tty present and no askpass program specified”。\n为什么会在这种情况下发生这种情况,我该如何解决?\n我看到过类似的问题,但如果能在这个背景下得到清晰的解释,我将非常感谢,谢谢。

0
0 Comments

问题出现的原因是使用su命令执行脚本时,-c选项不支持交互模式。解决方法是使用sudo命令代替su命令,并使用-u选项指定执行用户,-H选项保持原有用户环境。以下是具体的解决方法:

将原来的命令:

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

替换为以下命令:

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

同时,建议在脚本中尽量避免使用sudo命令。如果脚本需要root权限,可以在脚本中使用sudo命令来降低权限。此外,sudo命令会缓存用户凭证5分钟(除非在/etc/sudoers中设置了超时时间),超过超时时间后需要重新输入密码。因此,如果使用sudo命令启动的进程运行时间超过超时时间,下一次使用sudo命令时将再次要求输入密码。

希望以上解决方法对您有帮助。

0