Paramiko:连接到Cisco C2960切换台时无法重新使用ssh会话

时间:2011-11-16 11:45:05

标签: python ssh paramiko cisco

我正在尝试编写一个简单的脚本来连接Cisco C2960切换器。我无法弄清楚如何重新使用ssh会话来执行两个以上的命令。

有关于SO的讨论,
Persistent ssh session to Cisco router
但那里提供的答案都没有解决我的问题。

这是我的代码:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('xxx',username='xxx',password='xxx',allow_agent=False)
stdin, stdout, stderr = ssh.exec_command('show version')
stdin, stdout, stderr = ssh.exec_command('sh mac brief')

结果:

Traceback (most recent call last):
  File "./test.py", line 10, in <module>  
    stdin, stdout, stderr = ssh.exec_command('sh mac brief')
  File "/usr/lib/python2.6/site-packages/paramiko/client.py", line 363, in exec_command
    chan = self._transport.open_session()
  File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 658, in open_session
    return self.open_channel('session')
  File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 746, in open_channel
    raise e
EOFError

2 个答案:

答案 0 :(得分:1)

invoke_shell()最适合与Cisco IOS交互,我尝试了paramiko中的其他功能,但所有这些功能都会丢失错误的EOF文件错误

答案 1 :(得分:0)

我在引用的SO问题上回答了这个问题,但您是否尝试使用invoke_shell()

我见过很多报告,有些思科设备在关闭连接之前只允许一个命令执行(虽然这可能在设备的某个地方可配置)。在这种情况下,您需要启动一个shell,并以交互方式工作(或者像pexpect一样以伪交互方式工作),或创建一个脚本作为单个命令发送。