使用 Python 的 Paramiko exec_command 使用 PowerShell Start-Process 启动的进程无法正常工作,尽管它在 SSH 终端上工作正常

问题描述 投票:0回答:2

我想以管理员身份执行Python脚本。我使用以下命令来执行此操作:

powershell Start-Process python -ArgumentList "C:\Users\myuser\python_script.py","-param1", "param1","-param2","param2" -Verb "runAs"

如果我使用终端使用传统 SSH,此命令可以正常工作。 目标机器是 Windows RS4,我正在使用自 RS3 以来可用的新本机 SSH 服务器。

我客户的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
策略时遇到
paramiko.AutoAddPolicy()
文件和 Windows 问题)

python powershell ssh paramiko start-process
2个回答
1
投票

当启动它的 SSH 通道关闭时,以

Start-Process
启动的进程将关闭。

“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“shell”通道)在

powershell
进程完成后保持打开状态。但是,如果您在
python
进程完成之前关闭终端,它也会终止它。


强制性警告:请勿使用

AutoAddPolicy
– 这样做您将失去针对 MITM 攻击的保护。正确的解决方案请参阅Paramiko“未知服务器”


0
投票

我也面临同样的问题...执行命令后,另一个终端没有在服务器端打开...而是在客户端得到输出和打印。您能否确认一下……马丁的解决方案是否有效或如何解决此问题

© www.soinside.com 2019 - 2024. All rights reserved.