Модуль Python pexpect — как подключиться к серверу ssh, а затем запустить команды bash

Я новичок, и я не мог найти полный ответ на свой вопрос. Поэтому я спрашиваю это здесь. Я использую python и модуль pexpect для подключения к серверу ssh и выполнения нескольких команд. Однако некоторые команды не работают. Я просмотрел документацию и вижу, что выполняется такая команда, как:

ls -l | grep -i <Filter>

Потому что я должен использовать команду spawn для запуска сценария bash с

child = pexpect.spawn('/bin/bash -c "ls -l | grep LOG > logs.txt"')

Однако я подключаюсь к серверу, отправляя команду ssh с ключом:

p = pexpect.spawn("ssh -t -t NAME@IP -i ~/.ssh/Keyfile ")

Поэтому я не могу запустить команду spawn с командой bash внутри нее (или могу?)

Ответ должен быть запросом пароля, потому что он перенаправляет меня на другую машину.

Как мне использовать команду spawn, чтобы я мог подключиться к серверу с помощью ключа, ввести пароль для перенаправленной машины, а затем запустить команду bash.

Примечание. Я пытаюсь разобраться с частью bash. У меня уже работает Подключение к серверу и перенаправление + ввод пароля.


person Steven    schedule 02.04.2017    source источник


Ответы (1)


Вы можете отправить команду в следующей строке:

ssh = pexpect.spawn('ssh  -t -t NAME@IP -i ~/.ssh/Keyfile')
#You may write expect here to check if the ask if for password or some other error or the initial banner message
ssh.sendline('password')
#You may check if the password is successful
ssh.sendline('/bin/bash -c "ls -l | grep LOG > logs.txt"');
person James Jithin    schedule 02.04.2017
comment
Спасибо, я не знаю, почему это очевидное решение не пришло ко мне :) Также обратите внимание, что я пробовал это и на устройстве Android, где нет / bin / bash, а скорее bin / sh, я должен был указать, что bin был расположен в системе, поэтому результат будет ssh.sendline('system/bin/sh -c ls -l | grep LOG › logs.txt'); если кому интересно - person Steven; 03.04.2017