Не удается ssh запустить удаленный скрипт с использованием Python - PullRequest
0 голосов
/ 04 июля 2018

У меня есть скрипт ниже (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 голосов
/ 04 июля 2018

Используйте дополнительный аргумент:

shell=True

Ваша команда будет:

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

Полагаю, вам нужна оболочка для запуска скрипта на python.

0 голосов
/ 04 июля 2018

Если ваш вопрос касается необходимости выполнения удаленной команды, а не заставить ваш скрипт работать - тогда, если бы я мог представить 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, которая отлично работает в моих проектах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...