无法SSH使用Python运行远程脚本

时间:2018-07-04 06:59:01

标签: python linux ssh

我有下面的脚本(test.py上的1.1.1.1),可以在另一台服务器(script.py上的2.2.2.2)上运行另一个远程脚本。我已经设置了ssh密钥,因此不会提示您输入密码。

import subprocess

USER="user"
SERVER_IP="2.2.2.2"
SCRIPT_PATH="/home/abc/script.py"

print ("ssh {0}@{1} '/usr/bin/python {2} aaa bbb'".format(USER, SERVER_IP, SCRIPT_PATH))

rc = subprocess.check_output("ssh {0}@{1} '/usr/bin/python {2} aaa bbb'".format(USER, SERVER_IP, SCRIPT_PATH))

script.py本身位于1.2.3.4上,并接受2个参数。

如果我复制脚本中打印的命令,则可以在script.py上成功执行1.1.1.1。但是在test.py上运行1.1.1.1会给我一个错误:

OSError: [Errno 2] No such file or directory

我不明白为什么脚本不起作用,但是完全相同的命令自己起作用。

2 个答案:

答案 0 :(得分:1)

如果您的问题是解决执行远程命令而不使脚本运行的需要-那么我是否可以介绍Paramiko

import paramiko

ssh_handle = paramiko.SSHClient()
ssh_handle.load_system_host_keys()
ssh_handle.connect(
    hostname=address,
    port=int(port),
    username=login)

stdin, stdout, stderr = ssh_handle.exec_command("whoami")

IMO,它是当前最“可用”的SSH库,在我的项目中也可以正常工作。

答案 1 :(得分:1)

使用附加参数:

shell=True

您的命令将是:

rc = subprocess.check_output("ssh {0}@{1} '/usr/bin/python {2} aaa bbb'".format(USER, SERVER_IP, SCRIPT_PATH),shell=True)

我假设您需要一个外壳来运行python脚本。