Пароль жесткого кода вместо того, чтобы запрашивать его

@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)
Другие вопросы по тегам