使用Paramiko时如何关闭本地回声?

时间:2013-04-09 20:49:36

标签: python ssh paramiko

我正在使用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需要在远程控制台上发出类似“stty -echo”的bash命令,但是Cisco路由器没有运行bash。

1 个答案:

答案 0 :(得分:1)

在花了很多时间之后,我最终回到pxssh库。这个库显然有一种方法可以关闭echo:

    connection.setecho(False)

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

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