Как вводить команды через SSH в python? - PullRequest
0 голосов
/ 18 октября 2018

Использование paramiko для этого невозможно.


Это для программы на Python, работающей в операционной системе Linux.Используя следующий метод, я могу успешно подключиться по ssh к другой карте на моей полке.

def ssh(self, target_arg):
        cmd = self.get_command_output(subprocess.Popen(["ssh", target_arg], stdout=subprocess.PIPE))
        return cmd.communicate()[0]

Однако у меня есть массив команд, которые нужно выполнить на защищенной оболочке:

commands = ["cd somepath/file/examplefilepath","./examplebashscript"]

, которые яЯ хочу выполнить в хронологическом порядке карту, в которую я вставил ssh'd из моей программы на Python:

def ssh_with_commands(self, target_arg, commands):
        self.ssh(target_arg)
        for command in commands:
            # execute command on target shelf shell

, а затем продолжить выполнение остальной части программы Python в исходном потоке.


Какое-либо решение о том, как передать эти команды в ssh или каким может быть решение?

С уважением, Python и Linux Newb.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

SSH уже позволяет запускать команду вместо оболочки.

ИМЯ ssh - OpenSSH SSH-клиент (программа удаленного входа)

SYNOPSIS ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-Bbind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:] порт] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i индивидуальный_файл] [-J пункт назначения] [-L адрес] [-l логин_имя] [-m mac_spec] [-O ctl_cmd] [-o опция] [-p порт] [-Q запрос_опции] [-R адрес] [-S ctl_path] [-W хост: port] [-w local_tun [: remote_tun]] destination [command]

Таким образом, представляется более простое решение: поместите команды, которые вы хотите выполнить, в один файл сценария на вашем сервере.А затем просто запустите команду ssh следующим образом:

ssh <server> ./script.sh

В этом примере предполагается, что файл сценария находится в домашнем каталоге пользователя, в который вы входите как.В противном случае просто укажите полный путь к файлу.

0 голосов
/ 18 октября 2018

Команды должны быть переданы самой ssh;self.ssh(...) не возвращается, пока вы не выйдете из удаленной оболочки.Это потребует изменения ssh.

def ssh(self, target_arg, commands=None):
        cmd_args = ["ssh", target_arg]
        if commands is not None:
            cmd_args.append(";".join(commands))
        output = self.get_command_output(subprocess.Popen(cmd_args, stdout=subprocess.PIPE))
        return cmd.communicate()[0]

Обратите внимание, что это имеет некоторые существенные недостатки в отношении цитирования;вам, вероятно, лучше использовать такую ​​библиотеку, как Paramiko, чтобы открыть соединение и отправлять команды по одной за раз.

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