在子进程中运行需要sudo特权的命令

时间:2019-04-30 15:08:36

标签: python subprocess

我正在尝试使用python子进程库运行此命令sudo nmap -sP -n,我的目标是在运行该命令时创建脚本,该脚本将从文件中读取密码并将其添加到子过程中并执行该命令。问题是我总是必须输入密码才能执行命令。

我已经尝试过了,但是对我没有用。

p = subprocess.Popen(["sudo", "nmap", "-sP", "-n", network], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(bytes("Mypassword", "utf-8"))

我在Use subprocess to send a password处找到了一些解决方案,我尝试了所有解决方案,但对我没有用。知道如何解决问题吗?

1 个答案:

答案 0 :(得分:1)

sudo手册页指定:

 -S, --stdin
             Write the prompt to the standard error and read the password from the stan‐
             dard input instead of using the terminal device.  The password must be fol‐
             lowed by a newline character.

运行以下代码应该可以解决您的问题:

p = subprocess.Popen(["sudo", "-S", "cmd"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write("password\n")

很显然,请确保输入正确的密码,否则该密码将无效。另外,不要忘记在末尾添加\n

或者,您可以运行nmap as an unprivileged user。这将允许您使用不需要密码的nmap --privileged ...。但是,如链接中所指定,请确保您了解安全问题,以确保它不是用例的问题。