硬编码密码而不是提示输入密码

时间:2014-05-19 14:02:08

标签: python windows passwords elevated-privileges

@ hybris95 - 由于问题的范围已经改变并且您有回应,我会将您的初始答案标记为解决方案,但我发布了一个后续问题

Script cannot read password


我的python脚本以提升用户身份执行另一个脚本。不幸的是,它在执行过程中要求我输入密码。

如何对密码进行硬编码,或自动从其他地方读取密码?是否有可以在Python中完成的解决方法?

import os
import sys
import win32com.shell.shell as sh   
ASADMIN = '/user:DOMAIN\user'
os.system('"runas /user:DOMAIN\user "D:/Python27/python.exe myscript.py""')
sys.exit(0)

if sys.argv[-1] != ASADMIN:
    script = os.path.abspath(sys.argv[0])
    params = ''.join([ASADMIN] + ['D:\Python27\python.exe',script] + sys.argv[1:])
    sh.ShellExecuteEx(lpVerb='runas',lpFile=sys.executable,lpParameters=params)
    sys.exit(0)

更新了代码,但仍然出现错误

import os
import sys, subprocess, socket, string
import wmi, win32api, win32con
import win32com.shell.shell as sh   

command = 'runas /user:DOMAIN\username "D:/Python27/python.exe myscript.py"'

pst = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)

pst.communicate("password123")

我得错误

Attempting to start D:/Python27/python.exe script.py as user "DOMAIN\username" ...
RUNAS ERROR: Unable to run - D:/Python27/python.exe myscript.py
1326: Logon failure: unknown user name or bad password.

2 个答案:

答案 0 :(得分:1)

您可以使用subprocess.Popen()生成子流程,Popen.communicate()为其提供输入(密码):

p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)
p.communicate(password)

答案 1 :(得分:1)

由于RunAs没有提供任何不提示密码的信息 您可以通过文件传递密码。

例如(在shell中)我会这样做:
runas /user:DOMAIN\user "D:/Python27/python.exe myscript.py < password.txt
其中password.txt包含我的密码

编辑:
您也可以使用管道硬编码密码:
echo "MyPassword" | runas /user:DOMAIN\user "D:/Python27/python.exe myscript.py