使用Ansible 2.4.3配置Cisco CSR1000v遇invalid_key_format错误求助
解决Ansible 2.4.3连接Cisco CSR1000v时的
Key_load_public: invalid format报错 我之前处理过一模一样的问题,这个报错的核心原因是旧版本Ansible(比如你的2.4.3)默认使用的paramiko SSH库,和系统原生OpenSSH客户端对AWS生成的PEM密钥的解析逻辑不一致——你手动SSH能用,是因为用的是系统的OpenSSH,而Ansible默认走了paramiko,它对这类密钥的格式兼容性不好。
下面是几个亲测有效的解决方案,按优先级尝试:
1. 强制Ansible使用系统OpenSSH连接插件
这是最直接的解决方法,让Ansible和你手动登录时用同样的SSH客户端:
- 方法一:在inventory文件中给目标路由器添加连接方式配置:
[csr_routers] csr1000v ansible_host=你的路由器公网IP ansible_user=ec2-user ansible_ssh_private_key_file=/path/to/你的aws-key.pem ansible_connection=ssh
- 方法二:在playbook的
vars或者host_vars中设置:
- name: 配置CSR1000v hosts: csr_routers vars: ansible_connection: ssh tasks: # 你的任务内容
2. 确保密钥文件权限正确
虽然你手动SSH能登,但Ansible对私钥权限的检查更严格,必须设置为600(只有所有者可读可写):
chmod 600 /path/to/你的aws-key.pem
3. 转换密钥格式(如果上述方法无效)
有时候AWS生成的PEM密钥带有的一些细微格式差异会被paramiko误判,你可以用ssh-keygen重新转换密钥格式(不会改变密钥本身,只是调整编码):
ssh-keygen -p -f /path/to/你的aws-key.pem -m pem
4. 升级Ansible版本(长期解决方案)
Ansible 2.4.3是2017年的老版本,有很多已知的SSH连接兼容性问题。如果条件允许,升级到2.9.x或更高的稳定版本,后续版本对OpenSSH的支持更完善,这类问题大概率会自动消失。
内容的提问来源于stack exchange,提问作者kbreit
相关产品推荐
相关产品推荐

