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

Ansible通过跳板机连目标主机用跳板机私钥的配置及报错解决

错误原因

  • 引号嵌套混乱:inventory配置中ansible_ssh_common_args的多层单双引号嵌套被ansible错误转义,最终执行的ssh命令参数畸形,导致跳板机主动断开连接
  • 逻辑不符合需求:你配置的ForwardAgent是将本地A的ssh代理转发到跳板机B,需要本地持有目标主机C的私钥,完全违背你「C的私钥仅存储在B」的核心要求;同时非交互式ssh场景下B默认不会启动ssh-agent,直接执行ssh-add必然失败
  • 参数冲突:同时在组变量和主机行重复定义ssh端口参数,旧版ansible存在优先级解析冲突

正确配置方案

直接修改inventory.ini为以下内容,替换尖括号占位符为实际值即可:

[deployment_host:vars]
# 目标主机C的登录用户名
ansible_user = <目标主机C的登录用户名>
# 目标主机C的ssh端口
ansible_port = 22
# 本地A连接跳板机B的私钥路径
ansible_ssh_private_key_file = <本地A上存放的连接B的私钥绝对路径>
# 核心代理配置,无多余转义
ansible_ssh_common_args='-o StrictHostKeyChecking=no -o ProxyCommand="ssh -o StrictHostKeyChecking=no -p 2222 <跳板机B的登录用户名>@<跳板机B的公网IP> ssh -o StrictHostKeyChecking=no -i /home/<跳板机B的登录用户名>/.ssh/id_rsa -W %h:%p"'

[deployment_host]
10.200.120.218

前置检查项

配置前先确保以下条件满足,避免额外报错:

  • 跳板机B上存放的C的私钥/home/<B的用户名>/.ssh/id_rsa权限为600,所属用户为B的登录用户
  • 跳板机B上该私钥的公钥已经添加到目标C的~/.ssh/authorized_keys文件中,在B上手动执行ssh -i ~/.ssh/id_rsa <C的用户名>@10.200.120.218 hostname可正常返回结果
  • 本地A上存放的连接B的私钥权限为600,公钥已添加到B的~/.ssh/authorized_keys文件中

验证方法

先在本地A手动执行ssh命令验证链路连通性,替换占位符后执行:

ssh -o StrictHostKeyChecking=no -o ProxyCommand="ssh -o StrictHostKeyChecking=no -p 2222 <B的用户名>@<B的公网IP> ssh -o StrictHostKeyChecking=no -i /home/<B的用户名>/.ssh/id_rsa -W 10.200.120.218:22" <C的用户名>@10.200.120.218 hostname

命令正常返回C的主机名后,再执行你原来的ansible命令即可正常运行。

内容的提问来源于stack exchange,提问作者Sharath Prakash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:08