如何在Ansible中配置双跳板主机的Inventory连接?
Ansible双跳板主机Inventory配置方案
直接用Ansible Inventory结合SSH的ProxyJump(或嵌套ProxyCommand)就能实现双跳,还能在Inventory里单独配置三层的用户、密码(支持Vault加密),完全避开你提到的那些局限。
核心配置示例(INI格式Inventory)
# 目标主机 [targets] my_target ansible_host=target_host.addr ansible_user=user3 ansible_ssh_pass={{ vault_target_pass }} # 两台跳板主机 [jumps] jump1 ansible_host=jump.host.ip ansible_user=user1 ansible_ssh_pass={{ vault_jump1_pass }} jump2 ansible_host=jump.host2.ip ansible_user=user2 ansible_ssh_pass={{ vault_jump2_pass }} # 给目标主机配置双跳参数 [targets:vars] # 方式1:用SSH 7.3+支持的ProxyJump链式语法(更简洁) ansible_ssh_common_args='-o ProxyJump="user1@jump.host.ip:22 user2@jump.host2.ip"' # 方式2:兼容旧版SSH的嵌套ProxyCommand写法 # ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p user2@jump.host2.ip -o ProxyCommand=\"ssh -W %h:%p user1@jump.host.ip -p 22\""'
关键细节说明
三层用户/密码独立配置:
目标主机和两台跳板的用户、密码都单独定义,敏感密码用Ansible Vault加密。加密密码的命令:ansible-vault encrypt_string '你的密码' --name 'vault_jump1_pass'把生成的加密内容直接贴到Inventory或者对应项目的vars文件里,跑Playbook时加
--ask-vault-pass就行。双跳参数的两种写法:
ProxyJump是新版SSH的简化语法,直接链式写两个跳板,格式为用户@跳板IP:端口,多个跳板用空格分隔- 旧版SSH不支持
ProxyJump就用嵌套的ProxyCommand,注意转义引号,确保内层命令能正确解析
避开原有方案的局限:
- 不用依赖全局SSH config,所有配置都在当前项目的Inventory里,项目之间互不干扰
- 不需要修改ansible.cfg,每个项目单独维护自己的Inventory即可
- 完全在Inventory中实现双跳配置,不需要额外的SSH隧道操作
内容的提问来源于stack exchange,提问作者morgan_chester
相关产品推荐
相关产品推荐

