Пароль жесткого кода вместо того, чтобы запрашивать его
@hybris95 - поскольку сфера действия вопроса изменилась, а вы отвечаете, я отмечу ваш первоначальный ответ как решение, но я разместил дополнительный вопрос
Скрипт не может прочитать пароль
Мой скрипт на 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 ответа
Так как RunAs не предоставляет ничего о том, чтобы не запрашивать пароль.
Вы можете передать пароль через файл.
Например (внутри оболочки) я бы сделал это: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
Ты можешь использовать subprocess.Popen()
порождать подпроцесс и Popen.communicate()
предоставить вход (пароль) к нему:
p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)
p.communicate(password)