使用PythonParamiko在远程服务器上使用非默认shell执行本地脚本



我正在尝试在远程服务器上运行本地bash脚本,而不将其复制到远程服务器中。测试目的如下所示。有很多服务器可以完美地运行它,但在一些运行tcsh的服务器中,存在问题。若以下内容不起作用,我该如何调用bash。下面是伪test.sh

#!/bin/bash
a=test
echo $a
echo $SHELL

我使用Python Paramikoexec_command进行远程执行,如下所示:

my_script = open("test.sh").read()
stdin, stdout, stderr = ssh.exec_command(my_script, timeout=15)
print(stdout.read().decode())
err = stderr.read().decode()
if err:
print(err)

假定该连接有效,并且相同的脚本适用于具有bash默认shell的其他服务器。

这是我得到的输出:

/bin/tcsh
printing from errors
a=test: Command not found.
a: Undefined variable.

#!/bin/bash是一个注释。将其作为命令发送到远程shell没有任何效果。

您必须在服务器上执行/bin/bash并将脚本发送到它:

stdin, stdout, stderr = ssh.exec_command("/bin/bash", timeout=15)
stdin.write(my_script)

此外,您必须在脚本末尾exitshell,否则它将永远不会结束。

相关问题:
将参数传递给本地存储的bash脚本,该脚本需要使用Python Paramiko 在远程机器上执行

最新更新