Paramiko会话超时,但我需要执行很多命令

时间:2016-12-16 12:01:44

标签: python-2.7 ssh paramiko cisco cisco-ios

我正在编写一个脚本(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连接的方法,无需关闭它或启动新连接,并轻松接收命令的输出。

先谢谢,美里。 :)

2 个答案:

答案 0 :(得分:0)

您需要正确地将命令链接在一起,就像在shell脚本中一样:

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

答案 1 :(得分: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了解更多详情。