我正在使用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。
答案 0 :(得分:1)
在花了很多时间之后,我最终回到pxssh库。这个库显然有一种方法可以关闭echo:
connection.setecho(False)
......这正是我所需要的。它(通过父模块,pexpect)有一种方法可以使用完全相同的库基础设施来处理telnet(不幸的是,在思科世界中经常需要它),所以你可以拥有一个使用telnet的连接对象或者ssh,它以完全相同的方式工作。
虽然Paramiko看起来像一个更清洁,更好维护的库,Paramiko社区的共识似乎是,如果你想要停止回声,你需要告诉远程系统不要回声。但是当远程系统不是linux / bash进程时,这变得困难或不可能。 Pxssh是您对ssh会话进行更精细控制所需的库。