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

1

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

  • 0
    @MartinPrikry l Я упоминал, что использую ssh-сервер, входящий в состав Windows RS4 (вы устанавливаете его по требованию в «приложениях и функциях»). Я часто использую paramiko, большинство команд, которые я пробовал, работает, даже другие команды powershell. У меня не было успеха с командами, которые запрашивают запуск от имени администратора. Мне интересно узнать, почему эта конкретная команда работает с ssh, но не с paramiko.
  • 0
    @MartinPrikryl Я не вижу, это спрашивает. В моем скрипте на Python есть часть, которая работает только с правами администратора и, кажется, работает, когда выполняется с помощью терминала. Я тоже устал отключать UAC, но он ведет себя так же.
Теги:
powershell
ssh
start-process
paramiko

1 ответ

1
Лучший ответ

Процесс, начатый с 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 "Неизвестный сервер".

  • 1
    Да, "-Wait" сделал свое дело. Спасибо за помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню