【问题标题】:Python - Paramiko isn't running a remote script properlyPython - Paramiko 没有正确运行远程脚本
【发布时间】:2017-06-05 16:36:59
【问题描述】:
我正在尝试通过 SSH 在远程计算机上运行脚本(该脚本位于远程计算机上)。但是,当我运行 Paramiko 时,我所做的只是:
ssh = paramiko.SSHClient()
ssh.connect(-----blacked out-----)
ssh.exec_command("python script.py")
但它甚至没有执行命令。该脚本仅运行几个命令行命令。如果我通过远程计算机的终端在远程计算机上运行 script.py 文件,它就可以正常工作,但是当我尝试使用 ssh 像上面的 paramiko 那样执行它时,它就不行了。
【问题讨论】:
标签:
python
python-2.7
subprocess
paramiko
【解决方案1】:
您可能需要将完整路径传递给 python 和/或脚本,有时当不在终端/交互 (tty) 模式下执行时,找不到路径,因为它不会加载您在运行期间加载的配置文件脚本交互式外壳。
【解决方案3】:
我也遇到过类似的问题。就我而言,我正在从 ps1 文件执行另一个进程,并且 ps1 文件在 ssh.exec_command() 函数中给出。
我的代码流是
ssh = paramiko.SSHClient()
ssh.connect(Host, Port, Username, Passsword)
ssh.exec_command(run.ps1)
# ----------------------
# As per the Expectation :
# -> run.ps1 will execute on remote
# -> run.ps1 contains "start-process notepad.exe"
# -> So, it should spawn a fresh notepad process
# ----------------------
但是,notepad.exe 没有在远程系统上启动
我参考其他解决方案进行了以下更改:
- 将所有单个文件路径转换为绝对路径。
- 在 run.ps1 文件中添加了一个等待,直到子进程完成其执行
- 在 exec_command 中传递的参数为 "powershell.exe -File Absolute/path/of/file.ps1"
- 将日志文件保存到 paramiko 代码中为 paramiko.util.log_to_file('sssh.log')
这次我可以看到 Notepad.exe 正在后台运行
希望对上述问题有所帮助