Ansible v2.5使用ios_command模块执行命令时报终端参数设置错误
解决Ansible v2.5执行IOS命令时"unable to set terminal parameters"错误
嘿,我来帮你搞定这个Ansible和IOS交换机交互的问题!你碰到的unable to set terminal parameters错误,大多是因为Ansible没法正确配置设备的终端会话参数(比如终端长度、宽度),导致命令执行时出现交互卡壳的情况。结合你给出的YAML片段,我整理了几个针对性的解决方案:
1. 补全Provider配置并提前设置终端参数
你的provider变量看起来没写完,首先得补全必要的认证信息,而且在执行目标命令前,最好先设置终端长度为0(避免IOS默认的分页输出打断Ansible的会话)。修改后的任务部分可以参考下面的写法:
tasks: - name: SYS | Define provider set_fact: provider: host: "{{ inventory_hostname }}" username: "{{ mgmt_username }}" password: "{{ mgmt_password }}" authorize: yes # 如果你的设备需要进入特权模式,记得加上这个 auth_pass: "{{ enable_password }}" # 特权模式密码,没有的话可以删掉这行 - name: CLI | 配置终端参数避免分页 ios_command: provider: "{{ provider }}" commands: - terminal length 0 - terminal width 512 - name: CLI | 获取当前时钟 ios_command: provider: "{{ provider }}" commands: - show clock register: clock_output - name: 显示时钟输出 debug: var: clock_output.stdout_lines
2. 检查依赖包和模块兼容性
Ansible v2.5的ios_command模块依赖paramiko和netmiko这类SSH库,确保你已经安装了这些必要的依赖:
pip install paramiko netmiko
另外你用的connection: local是正确的,因为我们是从本地主机发起SSH连接到远程交换机,不需要Ansible在交换机上建立连接。
3. 验证设备可达性和基础SSH连接
先手动验证一下你的本地主机能不能正常SSH到目标交换机,并且执行show clock命令:
ssh {{ mgmt_username }}@<你的交换机IP>
如果手动登录都有问题,那得先排查设备的SSH配置、网络连通性,排除设备本身的问题。
4. 额外的小调整:延长会话超时时间
如果还是报错,可以尝试在provider里添加timeout参数,给Ansible更多时间建立和配置终端会话:
provider: host: "{{ inventory_hostname }}" username: "{{ mgmt_username }}" password: "{{ mgmt_password }}" timeout: 60 # 单位是秒,根据你的网络情况调整
最后提一句,Ansible v2.5确实比较老旧了,要是条件允许,建议升级到v2.10以上的版本,新版本对IOS设备的兼容性更好,也修复了不少老版本的bug。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

