我正在尝试使用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处找到了一些解决方案,我尝试了所有解决方案,但对我没有用。知道如何解决问题吗?
答案 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 ...
。但是,如链接中所指定,请确保您了解安全问题,以确保它不是用例的问题。