python - 如何让python脚本给sudo提示我的密码

标签 python linux sudo

我正在用 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/

相关文章:

php56 - CentOS - Remi repo

bash - 如何通过 sudo 命令使用 for 循环运行脚本

linux - 使用 sudo atom 根本不再打开 Atom,更不用说作为 root 了

python - 嵌套循环中结果的唯一变量名称

python - 字符串列表中的公共(public)子字符串

python - "class functions"在 Python 中是指 "functions"还是 "methods"

python - 使用python通过web设置ftp服务

python - 有没有办法用 python 启动/停止 linux 进程?

linux - 为特定命令添加 NOPASSWD

python - 创建长时间运行的进程的机制