Skip to main content
 首页 » 编程设计

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

2025年05月04日11softidea

我正在使用 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。

请您参考如下方法:

在花了很多时间之后,我最终回到了 pxssh图书馆。这个库明确地有一种方法来关闭回声:

    connection.setecho(False) 

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

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