我编写了一个包含以下行的 python 脚本:
response = subprocess.check_output(['/usr/bin/sudo /bin/su - backup -c "/usr/bin/ssh -q -o StrictHostKeyChecking=no %s bash -s" <<\'EOF\'\nPATH=/usr/local/bin:$PATH\nmvn --version|grep -i Apache|awk \'{print $3}\'|tr -d \'\n\'\nEOF' % i], shell=True)
这是一个 for 循环,它遍历主机名列表,每个我想检查它的命令结果。当我自己运行它时,它工作得很好,但是,这个脚本将由系统用户(shinken - nagios fork)运行,此时我遇到了一个问题。
shinken ALL=(ALL) NOPASSWD: ALL
但是,我想限制用户只允许它作为备份用户运行:
shinken ALL=(backup) NOPASSWD: ALL
但是当我运行脚本时,我得到:
sudo: no tty present and no askpass program specified
我已经阅读了这个并尝试了一些方法来解决它。我尝试将 -t 添加到我的 ssh 命令中,但这没有帮助。我相信我应该能够使用类似于以下内容的命令运行该命令:
response = subprocess.check_output(['/usr/bin/sudo -u backup """ "/usr/bin/ssh -q -o StrictHostKeyChecking=no %s bash -s" <<\'EOF\'\nPATH=/usr/local/bin:$PATH\njava -version|grep -i version|awk \'{print $3}\'|tr -d \'\n\'\nEOF""" ' % i], shell=True)
但后来我得到了这个回应:
subprocess.CalledProcessError: Command '['/usr/bin/sudo -u backup """ "/usr/bin/ssh -q -o StrictHostKeyChecking=no bamboo-agent-01 bash -s" <<\'EOF\'\nPATH=/usr/local/bin:$PATH\njava -version|grep -i version|awk \'{print $3}\'|tr -d \'\n\'\nEOF""" ']' returned non-zero exit status 1
如果我手动运行命令,我会得到:
sudo: /usr/bin/ssh: command not found
这很奇怪,因为那是它生活的地方……我不知道我正在尝试的是否可能。感谢您的任何建议!