【问题标题】:How to turn off local echo when using Paramiko?使用 Paramiko 时如何关闭本地回声?
【发布时间】:2013-04-01 11:46:00
【问题描述】:

我正在使用 Paramiko 连接到远程 Cisco 路由器和交换机。连接到这些设备时,我希望能够在进入“配置”模式时关闭回声。这样,我可以向远程系统发出命令并避免看到它们返回(从而只专注于查找错误消息)。

我正在执行以下命令来获取 Cisco 设备的 shell:

    self.chan = self.transport.open_session()
    self.chan.get_pty()
    self.chan.invoke_shell()

现在,我希望能够为 pty 获取 paramiko 的文件描述符并发出如下内容:

    fd = self.chan.fileno()
    old = termios.tcgetattr(fd)
    old[3] = old[3] | termios.ECHO
    termios.tcsetattr(fd, termios.TCSADRAIN, old)

但是,termios 阻塞了 chan.fileno() 返回的文件描述符。

我见过的大多数 suggestions 关闭 echo 需要在远程机器上发出类似“stty -echo”的 bash 命令,但 Cisco 路由器没有运行 bash。

【问题讨论】:

    标签: python ssh paramiko


    【解决方案1】:

    在花了很多时间之后,我最终回到了pxssh 库。这个库明确有办法关闭回声:

        connection.setecho(False)
    

    ...这正是我所需要的。它还(通过父模块pexpect)有一种方法可以使用完全相同的库基础设施来处理 telnet(不幸的是,这在 Cisco 世界中仍然经常需要),因此您可以拥有一个使用 telnet 或 ssh 的连接对象它的工作方式完全相同。

    虽然 Paramiko 看起来是一个更干净、维护得更好的库,但 Paramiko 社区的共识似乎是,如果你想停止回显,你需要告诉远程系统不要回显。但是当远程系统不是 linux/bash 进程时,这变得困难或不可能。 Pxssh 是您对 ssh 会话进行更细粒度控制所需的库。

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2020-09-12
      • 2011-08-03
      • 2016-09-01
      • 1970-01-01
      相关资源
      最近更新 更多