【问题标题】:Paramiko: failed to re-use ssh session when connecting to Cisco C2960 switcherParamiko:连接到 Cisco C2960 交换机时无法重新使用 ssh 会话
【发布时间】:2011-12-30 08:50:54
【问题描述】:

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

【问题讨论】:

    标签: python ssh paramiko cisco


    【解决方案1】:

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

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

    【讨论】:

    • 我必须使用pexpect 而不是paramiko :-( 顺便说一句,为 IOS 启用多个命令的选项是什么?谢谢 :-)
    • 不,您可以使用 pexpect 和 paramiko 来编写使用交互式提示的脚本。我自己不使用IOS,我只是猜测可能有一个启用多个命令的选项。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2020-03-23
      • 2020-02-10
      相关资源
      最近更新 更多