近期接到一个需求,要批量登录网络设备获取配置。
原计划使用 Paramiko exec即可,但是后来发现,有些设备命令也执行了,但是没有回显。
于是尝试使用 invoke_shell() 方式。
前期调试倒是OK,直到遇见一个输出内容较长的设备,问题出现了,报错:
utf-8 codec can't decode byte 0×e5 in position 1023: Unexpected end of data.
原始的功能片段如下:
import paramiko
# 创建一个SSH客户端
ssh_client = paramiko.SSHClient()
# 加载本地 known_hosts 文件,Windows不需要,使用自动添加策略
ssh_client.load_system_host_keys()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接登录
ssh_client.connect(hostname="127.0.0.1", username="admin", password="passw0rd", port=22)
# 创建交互式shell
channel = ssh_client.invoke_shell()
channel.send(("某条命令" + '\n').encode('utf-8'))