Процесс, запущенный с помощью PowerShell Start-Process, использующего Python Paramiko exec_command, не работает, хотя он работает нормально с терминала SSH - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу выполнить скрипт 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() policy)

1 Ответ

0 голосов
/ 26 сентября 2018

Процесс, начатый с 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")
* 1013.*

Он «работает» с терминала SSH, поскольку терминал (канал «оболочки» SSH) остается открытым после завершения процесса powershell.Но если вы закроете терминал до завершения процесса python, он также прекратит его.


Обязательное предупреждение: не используйте AutoAddPolicy - вы теряете защиту от MITM атакует тем самым.Для правильного решения см. Paramiko "Неизвестный сервер" .

...