尝试执行sudo命令时,shell脚本会显示“sudo: no tty present and no askpass program specified”的错误信息。
尝试执行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我看到过类似的问题,但如果能在这个背景下得到清晰的解释,我将非常感谢,谢谢。
问题出现的原因是使用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
命令时将再次要求输入密码。
希望以上解决方法对您有帮助。