Ansible连接EXOS设备SSH密钥算法不匹配问题求解
问题:Ansible连接EXOS设备时SSH密钥算法不匹配
环境与Playbook
我用以下Ansible Playbook在Extreme Networks EXOS 16.2.5.4设备上创建VLAN:
--- - name: Create VLAN hosts: exos_device connection: ansible.netcommon.network_cli vars: ansible_user: admin ansible_password: password ansible_network_os: community.network.exos tasks: - name: Create VLAN 4050 community.network.exos_config: lines: - create vlan TESTVLAN tag 4050 match: exact save_when: always
报错信息
执行时持续出现SSH连接失败,错误如下:
fatal: [10.12.2.10]: FAILED! => { "changed": false, "module_stderr": "ssh connection failed: ssh connect failed: kex error : no match for method server host key algo: server [ssh-rsa], client [rsa-sha2-512,rsa-sha2-256,ssh-ed25519,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256]", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error" }
错误表明Ansible控制端与EXOS设备的主机密钥算法不匹配:服务器仅支持ssh-rsa,但客户端默认支持的算法列表中不包含该选项。
已尝试的无效配置
我曾在ansible.cfg中添加以下配置,但未解决问题:
[defaults] inventory = inventory.ini ssh_args = -oKexAlgorithms=ssh-rsa
解决方案
之前的配置错误在于参数选择:报错是主机密钥算法不匹配,而非密钥交换算法(KexAlgorithms)。正确的做法是指定HostKeyAlgorithms参数,以下三种方式任选其一:
方式1:修改ansible.cfg全局配置
在ansible.cfg中更新ssh_args,添加HostKeyAlgorithms=+ssh-rsa(+表示在客户端原有算法列表中追加,而非替换):
[defaults] inventory = inventory.ini ssh_args = -oHostKeyAlgorithms=+ssh-rsa
方式2:在Inventory中针对单设备配置
在inventory.ini中为目标EXOS设备单独添加SSH参数:
[exos_device] 10.12.2.10 ansible_ssh_common_args="-oHostKeyAlgorithms=+ssh-rsa"
方式3:在Playbook的vars中配置
直接在Playbook的变量块中指定SSH参数:
--- - name: Create VLAN hosts: exos_device connection: ansible.netcommon.network_cli vars: ansible_user: admin ansible_password: password ansible_network_os: community.network.exos ansible_ssh_common_args: "-oHostKeyAlgorithms=+ssh-rsa" tasks: - name: Create VLAN 4050 community.network.exos_config: lines: - create vlan TESTVLAN tag 4050 match: exact save_when: always
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

