簡體   English   中英

借助 Posh-SSH 模塊 (W10) 在遠程服務器上運行本地 python 腳本

[英]Run local python script on remote server thanks to Posh-SSH module (W10)

我想使用 Posh-SSH在遠程服務器上運行本地 python 腳本, Posh-SSH是 Powerhsell 中的一個模塊。 主題通過執行以下操作使用常規 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

編輯

沒有顯示錯誤,只是卡在上面,什么也不做……

編輯2

好的,我現在明白為什么在發送多行 py 文件時出現此錯誤。

新行不會被重新轉錄,看看什么命令將發送到遠程服務器:

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

並不是:

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

編輯3

終於完成了! 由於這個主題,我執行將空格更改為換行符,因為它應該是。 為了做到這一點

( (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 文件之上,否則它將無法工作。

您當前正在向 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

這里的文檔將准確地發送給程序的標准輸入流:制表符、空格、引號等等。 因此,上面將發送以下內容:

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

您可以將--ENDOFPYTHON--替換為任何未出現在您的 python 文件中的內容。

此處文檔的參考

更新:

正如提問者所指出的,添加了-join "`r`n"因為它需要正確發送換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM