Ansible通过ansible-pylibssh无法连接旧加密算法的远程设备
解决Ansible连接Cisco旧设备的SSH加密算法不匹配问题
1. 核心问题:ansible-pylibssh不读取系统SSH配置
ansible-pylibssh 作为独立的SSH库,默认不会加载系统的 ~/.ssh/config,所以你在该文件中添加的加密算法配置对Ansible无效,必须直接在Ansible层面指定参数。
两种配置方式:
全局配置(所有Playbook生效)
编辑~/.ansible.cfg(用户级)或/etc/ansible/ansible.cfg(系统级),添加以下内容:[ssh_connection] ssh_args = -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa -o KexAlgorithms=+diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1注意:将
KexAlgorithms的值替换为你手动SSH连接时验证有效的算法(匹配之前的KEX错误提示)。Playbook级配置(仅当前Playbook生效)
在目标主机的Playbook中添加SSH参数变量:- name: 连接Cisco设备 hosts: cisco_devices vars: ansible_ssh_common_args: "-o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa -o KexAlgorithms=+diffie-hellman-group1-sha1" tasks: # 此处添加你的任务
2. 解决主机密钥算法不匹配问题
针对更新后出现的「服务器仅支持ssh-rsa,客户端仅提供rsa-sha2-256」错误:
- 必须确保配置中明确添加
ssh-rsa到HostkeyAlgorithms和PubkeyAcceptedAlgorithms,使用+符号表示在原有算法列表基础上追加,而非覆盖全部算法。 - 无论使用密钥认证还是密码认证,
HostkeyAlgorithms的配置都是必须的(用于验证目标主机身份)。
3. 验证配置有效性
通过调试模式运行Ansible ping模块,检查SSH参数是否正确加载:
ansible cisco_devices -m ping -vvv
在输出中查找SSH command line相关日志,确认你指定的加密算法已被包含。
4. 确保ansible-pylibssh版本正常
旧版本的ansible-pylibssh可能存在配置解析bug,建议升级到最新稳定版:
pip install --upgrade ansible-pylibssh
内容的提问来源于stack exchange,提问作者notomera
相关产品推荐
相关产品推荐

