我想以管理员身份执行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 问题)
当启动它的 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“未知服务器”。
我也面临同样的问题...执行命令后,另一个终端没有在服务器端打开...而是在客户端得到输出和打印。您能否确认一下……马丁的解决方案是否有效或如何解决此问题