You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:19:51