1

我正在尝试编写一个简单的脚本来连接 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
4

2 回答 2

1

与 Cisco IOS 交互时,invoke_shell() 是最好的,我在 paramiko 中尝试了其他功能,但它们都抛出错误的 EOF 文件错误

于 2014-09-15T12:29:15.437 回答
0

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

我已经看到许多报告说,某些 Cisco 设备在关闭连接之前只允许执行一个命令(尽管这可能在设备的某处可配置)。在这种情况下,您需要启动一个 shell,并以交互方式工作(或像 pexpect 那样以伪交互方式工作),或者创建一个脚本以作为单个命令发送。

于 2011-11-29T19:40:00.477 回答