使用Python SSH2向华为MA5801 OLT下发命令报错如何解决
问题根因
- 华为MA5801的CLI不支持
;拼接多条命令,你一次性发送enable;config;interface gpon 0/1会被设备识别为非法命令,触发未知命令报错。 paramiko.exec_command()为单次非交互式执行接口,而华为OLT的配置流程需要上下文交互(执行完enable需等待设备返回特权模式提示符后再发config命令),直接批量下发无上下文的命令会触发控制台安全退出机制。
解决方法
改用paramiko的交互式shell模式,逐条下发命令,每条命令末尾加换行符模拟手动回车操作,同时增加适当延时等待设备处理命令,修改后可正常运行的代码如下:
import paramiko import time # 替换为实际OLT信息 olt_ip = 'xx.xx.xxx.xxx' username = 'user' password = 'password' enable_pwd = '你的特权模式密码' # 若enable不需要额外密码可删除该变量 # 按执行顺序排列命令列表 cmd_list = [ 'enable', enable_pwd, # 若enable不需要密码可删除该行 'screen-length 0 temporary', # 关闭输出分页,避免后续命令执行卡住 'config', 'interface gpon 0/1', # 后续要执行的其他命令可按顺序追加在这里 ] # 初始化SSH连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=olt_ip, port=22, username=username, password=password, timeout=10) # 启用交互式shell cli_session = ssh.invoke_shell() time.sleep(1) # 等待会话初始化完成 # 逐条执行命令 for cmd in cmd_list: cli_session.send(f'{cmd}\n') # 可根据网络情况和命令复杂度调整延时,复杂配置命令建议设2-3秒 time.sleep(1.5) # 读取命令执行返回结果 res = cli_session.recv(65535).decode('utf-8') print(res) # 关闭连接 ssh.close()
额外注意事项
- 如果执行过程中仍然出现命令识别错误,可适当增加每条命令后的延时时间,避免网络延迟导致命令堆叠
- 确认使用的账号拥有进入特权模式、全局配置模式的对应权限,权限不足需联系设备管理员开通
内容的提问来源于stack exchange,提问作者Manual Cisneros
相关产品推荐
相关产品推荐

