Paramiko stdout 卡在路由器横幅消息处
Paramiko stdout stuck at router banner message
我对 Paramiko 还很陌生,如果这个问题已经得到解答,我深表歉意
我正在尝试自动登录和执行 PAN 防火墙。 FW输出如下:
Last login: Wed Apr 27 11:54:01 2022 from 10.54.90.24
Number of failed attempts since last successful login: 0
admin@PA-5440-F03_31> show transceiver-detail all
我的代码如下:
>>> import paramiko
>>> command = "show transceiver-detail all"
>>> client = paramiko.client.SSHClient()
>>> client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> client.connect(hostname, username=username, password=password)
>>> _stdin, _stdout, _stderr = client.exec_command(command)
>>> client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> client.connect(hostname, username=username, password=password)
>>> _stdin, _stdout, _stderr = client.exec_command(command)
我的问题是,当我读取 _stdout 时:
>>> print(stdout.read().decode())
我只得到横幅:
'\n\n\nNumber of failed attempts since last successful login: 0\n\n\n\n'
如何到达 exec_command returns stdout 捕获输出的地步?
注意:在读取命令起作用之前,我必须明确关闭 _stdout 通道(_stdout.channel.close()
)。不确定这是标准程序还是我需要做些什么来确保频道自动关闭。
原来 PAN 有自己的 Python 模块 - pandevice - 可以处理这个问题。
from pandevice.firewall import Firewall
import xml.etree.ElementTree as ET
fw = Firewall(hostname, api_username=<username>, api_password=<password>)
result = fw.op(cmd='show transceiver-detail all')
>>> type(result)
<class 'xml.etree.ElementTree.Element'>
我对 Paramiko 还很陌生,如果这个问题已经得到解答,我深表歉意
我正在尝试自动登录和执行 PAN 防火墙。 FW输出如下:
Last login: Wed Apr 27 11:54:01 2022 from 10.54.90.24
Number of failed attempts since last successful login: 0
admin@PA-5440-F03_31> show transceiver-detail all
我的代码如下:
>>> import paramiko
>>> command = "show transceiver-detail all"
>>> client = paramiko.client.SSHClient()
>>> client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> client.connect(hostname, username=username, password=password)
>>> _stdin, _stdout, _stderr = client.exec_command(command)
>>> client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> client.connect(hostname, username=username, password=password)
>>> _stdin, _stdout, _stderr = client.exec_command(command)
我的问题是,当我读取 _stdout 时:
>>> print(stdout.read().decode())
我只得到横幅:
'\n\n\nNumber of failed attempts since last successful login: 0\n\n\n\n'
如何到达 exec_command returns stdout 捕获输出的地步?
注意:在读取命令起作用之前,我必须明确关闭 _stdout 通道(_stdout.channel.close()
)。不确定这是标准程序还是我需要做些什么来确保频道自动关闭。
原来 PAN 有自己的 Python 模块 - pandevice - 可以处理这个问题。
from pandevice.firewall import Firewall
import xml.etree.ElementTree as ET
fw = Firewall(hostname, api_username=<username>, api_password=<password>)
result = fw.op(cmd='show transceiver-detail all')
>>> type(result)
<class 'xml.etree.ElementTree.Element'>