2016-12-16 3 views
0

Я работаю над скриптом (python 2.7), который работает с удаленным устройством под управлением Cisco IOS, поэтому мне нужно выполнить множество команд через ssh , Несколько команд не имеют выхода, а некоторые из них имеют, и я хочу получить результат. Это звучит примерно так:Парамико сеанса, но мне нужно выполнить много команд

import paramiko 
ssh=paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(self._ip, port=22, username=username, password=password 
stdin, stdout, stderr = ssh.exec_command('command with no output') 
stdin, stdout, stderr = ssh.exec_command('command with no output') 
stdin, stdout, stderr = ssh.exec_command('command with output') 
sh_ver = stdout.readlines() 

Дело в том, exec_command это приводит к тому, канал закрывается и он не может быть использован повторно, но это не возможно для меня, чтобы открыть новый канал для того, чтобы выполнить другую команду, потому что это сеанс команд, которые в конце концов мне нужно получить вывод.

Я попытался выполнить команды этот путь, а также:

stdin, stdout, stderr = ssh.exec_command(''' 
command 
command 
command 
''') 
output = stdout.readlines() 

, но этот путь, output пуст. И даже если это не так, мне нужно выполнить несколько проверок на output, а затем продолжить сеанс, где я остановился.

Так что мне нужно? Способ управления этим ssh-соединением, не закрывая его или не запуская новый, и легко получить результат из команды.

Заранее спасибо, Мири. :)

ответ

0

Я думаю, что вам нужно, это invoke_shell(). Например:

ssh = paramiko.SSHClient() 
... ... 
chan = ssh.invoke_shell() # starts an interactive session 

chan.send('command 1\r') 
output = chan.recv() 

chan.send('command 2\r') 
output = chan.recv() 
... ... 

Channel имеет много других методов. Вы можете обратиться к document для получения более подробной информации.

0

Вы должны правильно цепь команд вместе, как в сценарии оболочки:

stdin, stdout, stderr = ssh.exec_command(''' 
command1 
&& command2 
&& command3 
''') 
+0

О, ладно .. но, как я уже сказал, можно ли проверить выход, а затем продолжить в том же сеансе таким образом? –

+0

@MiriAdj: Я знаю, что вы сказали: 'exec_command()' может использоваться только один раз за сеанс, но я не думаю, что это правда. Ваша точка зрения, что вы хотите «продолжить» одну цепочку команд? Это действительно помогло бы, если бы вы были более конкретными в отношении команд. –

+0

Да, это цепочка команд. Команды для устройства cisco, поэтому это некоторые настройки, а затем я получаю вывод. –

Смежные вопросы