Удаленная команда SSH, отправленная Python 2.7 - PullRequest
0 голосов
/ 28 февраля 2019

Попытка выяснить, как отправить команду SSH.Это работает через cli:

ssh -i /path/myKey.pem centos@myServer.com lsb_release -a

Но происходит сбой, когда я настраиваю команду следующим образом:

cmd = ['ssh', '-i', '/path/myKey.pem', 'centos@myServer.com', 'lsb_release', '-a']): 
p =  Popen( cmd, shell=True, stdout=PIPE, stderr=PIPE )
        ( output, errStr ) = p.communicate()

Я получаю это сообщение с ошибкой 255:

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
       #Snip other usage

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 28 февраля 2019

Используя shell=True со списком, вы запускаете эквивалент

sh -c ssh -i /path/myKey.pem centos@myServer.com lsb_release -a

, что не , что вы хотите;он запускает ssh, но использует -i в качестве значения $0, а не первый аргумент ssh.Это делает /path/myKey.pem похожим на адрес хоста, к которому вы хотите подключиться.

Просто сбросьте shell=True.

p = Popen(cmd, stdout=PIPE, stderr=PIPE)

Хотя здесь нет проблем, Клаус ДПредложение. передать lsb_release -a в качестве единственного аргумента - это хорошая идея в целом.ssh должен объединить их в одну строку, чтобы перейти к sh -c на удаленном конце;можете также сделать это сами, чтобы убедиться, что все сделано правильно.

cmd = ['ssh', '-i', '/path/myKey.pem', 'centos@myServer.com', 'lsb_release -a']
...