Я хочу выполнить скрипт Python в качестве администратора. Для этого я использую следующую команду:
powershell Start-Process python -ArgumentList "C:\Users\myuser\python_script.py","-param1", "param1","-param2","param2" -Verb "runAs"
Эта команда отлично работает, если я использую традиционный SSH с помощью терминала. Целевой компьютер - это Windows RS4, и я использую новый собственный SSH-сервер, доступный с RS3.
Мой клиентский код Python:
import paramiko
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=myhost, username=myuser, password='trio_012')
stdin, stdout, stderror = ssh_client.exec_command("powershell Start-Process python -ArgumentList \"C:\Users\myuser\python_script.py\",\"-param1\", \"param1\",\"-param2\",\"param2\" -Verb \"runAs\"")
print 'stdout:', stdout.readlines()
print 'stderror:', stderror.readlines()
Выход, который я получаю:
stdout: []
stderror: []
Я не вижу, что скрипт работает на другой стороне, и кажется, что ничего не происходит. Я не знаю, в чем проблема, потому что у меня нет выхода.
Я использую Paramiko 1.18.5 (я не могу использовать новый v2, у меня возникают проблемы с файлом known_hosts
и Windows при использовании paramiko.AutoAddPolicy()
)
Процесс, начатый с Start-Process
, закрывается, когда канал SSH, который его запускает, закрыт.
Канал "exec" (exec_command
) закрывается сразу после завершения процесса powershell
, что почти мгновенно. Поэтому я считаю, что ваш процесс python
фактически запущен, но почти сразу же снят.
Это должно помочь, если вы добавите -Wait
переключатель в Start-Process
.
stdin, stdout, stderror =
ssh_client.exec_command("powershell Start-Process python -ArgumentList \"C:\Users\myuser\python_script.py\",\"-param1\", \"param1\",\"-param2\",\"param2\" -Verb \"runAs\" -Wait")
Он "работает" С SSH терминала, поскольку терминал ( "оболочка" канал SSH) остается открытым после powershell
процесса отделки. Но если вы закроете терминал до завершения процесса python
, он также завершит его.
Обязательное предупреждение: не используйте AutoAddPolicy
- вы теряете защиту от атак MITM, делая это. Для правильного решения см. Paramiko "Неизвестный сервер".