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