运行 远程服务器上的本地 python 脚本感谢 Posh-SSH 模块 (W10)
Run local python script on remote server thanks to Posh-SSH module (W10)
我想 运行 本地 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 文件之上,否则它将无法工作。
您当前正在向 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"
,因为正如提问者所指出的那样,正确发送换行符是必需的。
我想 运行 本地 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 文件之上,否则它将无法工作。
您当前正在向 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"
,因为正如提问者所指出的那样,正确发送换行符是必需的。