Как вводить команды через SSH в python?

1

Использование 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, либо какое решение может быть?

искренне питон и linux newb.

Теги:

2 ответа

1
Лучший ответ

Команды должны быть переданы самому 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, чтобы открыть соединение и отправить команды по одному.

  • 0
    Спасибо, только что протестировав это сейчас, реализованный в вышеприведенном коде вывод должен быть заменен на "cmd"
1

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

NAME ssh - клиент SSSS OpenSSH (программа удаленного входа)

SYNOPSIS ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-B bind_address] [-c cipher_spec] [-D [bind_address:] port] [-E log_file] [-E escape_char] [-F ] configfile] [-I pkcs11] [-I identity_file] [-J destination] [-L address] [-L имя_пользователя] [-m mac_spec] [-O ctl_cmd] [-O вариант ] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host: port] [-W local_tun [: remote_tun]] destination [command]

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

ssh <server> ./script.sh

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню