我有下面的脚本(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
我不明白为什么脚本不起作用,但是完全相同的命令自己起作用。
答案 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脚本。