我正在用 python 3.6 编写一个脚本,它使用许多 sudo 命令。该脚本作为我的用户在 linux 机器上运行。该脚本正在创建一种报告,对许多服务器执行 ssh 并运行 lsof 等命令。
我需要一种方法让 python 在我使用 sudo 时随时提供我的密码。显然在第一次我会输入我的密码,它可以保存在脚本的内存中。
我一直在使用 python 子进程来运行我的 sudo 命令,例如:
cmd = SSH + '-t ' + source + " ' " + SUDO + "-k " + LSOF + "-p " + pid + " ' " output = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, universal_newlines=True)
(out,error) = output.communicate()
这可能吗?
限制条件:
不允许根工具包
使用 sudo 运行脚本不是一个选项,因为该脚本会通过 ssh 连接到许多服务器,并且出于安全原因,我不允许这样做。
不能更改 sudoers 文件中的任何内容。
最佳答案
花了几个小时弄清楚如何使用子流程来完成它。
尽情享受吧
import getpass
import subprocess
sudo_password = getpass.getpass(prompt='sudo password: ')
p = subprocess.Popen(['sudo', '-S', 'ls'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
try:
out, err = p.communicate(input=(sudo_password+'\n').encode(),timeout=5)
except subprocess.TimeoutExpired:
p.kill()
关于python - 如何让python脚本给sudo提示我的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47881339/