【问题标题】:Run local python script on remote server thanks to Posh-SSH module (W10)借助 Posh-SSH 模块 (W10) 在远程服务器上运行本地 python 脚本
【发布时间】:2019-12-20 05:59:38
【问题描述】:

我想在远程服务器上运行本地 python 脚本使用 Posh-SSH,它是 Powerhsell 中的一个模块。 这个topic 通过执行以下操作在常规 ssh 中提及它:

Get-Content hello.py | ssh user@192.168.1.101 python -

我想在这里使用 Posh-SSH 模块,但我不知道如何实现它...

我尝试过这样的事情,但它不起作用

Invoke-SSHCommand -Index $sessionid.sessionid -Command "$(Get-Content hello.py) | python3 -u -" -ErrorAction Stop

编辑

没有显示错误,只是卡在上面,什么也不做......

EDIT2

好的,我现在明白了,为什么我在发送多行 py 文件时会出现此错误。

新行不会被重新转录,看看什么命令将被发送到远程服务器:

python3 -u - <<"--ENDOFPYTHON--"
chevre="basic" print("Hello, World!")
--ENDOFPYTHON--

而不是:

python3 -u - <<"--ENDOFPYTHON--"
chevre="basic" 
print("Hello, World!")
--ENDOFPYTHON--

EDIT3

终于完成了! 多亏了这个topic,我执行了将空格更改为换行符的操作。 就为了这个

( (Get-Content hello.py) -join "`r`n")

而不是简单的

$(Get-Content hello.py)

最后一行是:

$cmd = "python3 -u - <<`"--ENDOFPYTHON--`"`n$((Get-Content $pyscript) -join "`r`n")`n--ENDOFPYTHON--"
Invoke-SSHCommand -Index $sessionid.sessionid -Command $cmd -ErrorAction Stop

也别忘了删除线

#!/usr/bin/env python3

如果存在于您的 py 文件之上,否则它将无法工作。

【问题讨论】:

  • 您是否遇到任何错误?我们需要更多信息来提供帮助
  • 没有错误...只是卡在那里,就是这样。

标签: python powershell ssh posh-ssh


【解决方案1】:

您当前正在向 SSH 端点发送以下内容:

# Example Python Added: would be replaced with your code
print("Hello, World!") | python3 -u -

假设 bash 作为端点 shell,以上是无效的,会产生错误或挂起。

您需要使用echo 封装发送到服务器的代码(假设是 bash ssh 端点)。

Invoke-SSHCommand -Index $sessionid.sessionid -Command "echo '$((Get-Content hello.py) -join "`r`n")' | python3 -u -" -ErrorAction Stop

以上内容现在将发送:

echo 'print("Hello, World!")' | python3 -u -

只要您不使用单引号,它就可以工作。但是,如果您必须使用这些或其他特殊字符,则可能需要使用此处的文档:

Invoke-SSHCommand -Index $sessionid.sessionid -Command "python3 -u - <<`"--ENDOFPYTHON--`"`n$((Get-Content hello.py) -join "`r`n")`n--ENDOFPYTHON--" -ErrorAction Stop

here 文档将准确地发送到程序的标准输入流:制表符、空格、引号和所有内容。因此,上面将发送以下内容:

python3 -u - <<"--ENDOFPYTHON--"
print("Hello, World!")
--ENDOFPYTHON--

你可以用任何东西替换--ENDOFPYTHON--,只要它没有出现在你的python文件中。

Reference for here docs

更新:

添加了-join "`r`n",因为需要正确发送换行符,正如提问者所指出的那样。

【讨论】:

  • 看起来不错!!即使我仍然有问题。在我的 py 文件执行多行的那一刻,我有一个退出代码 1...我试图理解您放入链接的文档,但我没有理解所有这些,也许它提到它的地方...
  • 现在就知道为什么了。看看编辑一旦这个问题完成,我认为一切都会完美!
  • 啊,是的,我没有考虑新的线路。我已将其添加到我的答案中
猜你喜欢
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多