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

Ansible通过堡垒机SSH连接:能否在ansible_ssh_common_args中使用用户名密码?

在Ansible中通过堡垒机使用用户名密码连接的方案

答案是可以,但不建议直接在ansible_ssh_common_args里硬编码明文密码,下面是可行的实现方式以及更安全的替代方案:

1. 借助sshpass实现堡垒机密码认证

SSH本身不支持命令行直接传递密码,需要依赖sshpass工具完成非交互式密码输入。步骤如下:

  • 先在控制节点(运行Ansible的机器)安装sshpass:
    # Ubuntu/Debian系统
    sudo apt install sshpass
    # CentOS/RHEL系统
    sudo yum install sshpass
    
  • 在inventory文件中配置代理命令,结合变量传递密码:
    [target_hosts]
    web_server ansible_host=10.0.0.5 ansible_user=web_admin
    
    [target_hosts:vars]
    # 堡垒机配置变量
    jump_user=jump_admin
    jump_host=192.168.1.200
    # 通过ProxyCommand指定堡垒机代理,用sshpass传入堡垒机密码
    ansible_ssh_common_args='-o ProxyCommand="sshpass -p {{ jump_password }} ssh -W %h:%p -l {{ jump_user }} {{ jump_host }}"'
    # 目标主机的密码(若目标主机也用密码认证)
    ansible_ssh_pass={{ target_password }}
    
  • 运行Playbook时,若密码已用ansible-vault加密,需添加解密参数:
    ansible-playbook -i inventory.yml playbook.yml --ask-vault-pass
    

2. 更安全的替代方案(优先推荐)

如果之前密钥方式失败,建议先排查问题而非直接切换到密码:

  • 检查堡垒机的/etc/ssh/sshd_config是否开启AllowAgentForwarding yes,修改后重启sshd服务
  • 确保控制节点私钥已添加到ssh-agent:ssh-add ~/.ssh/your_private_key
  • 确认堡垒机~/.ssh/authorized_keys已添加控制节点公钥,目标主机~/.ssh/authorized_keys已添加堡垒机公钥
  • 此时可直接用密钥转发配置代理,无需密码:
    ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -l {{ jump_user }} {{ jump_host }}"'
    

注意事项

  • 绝对不要在配置文件中明文存储密码,使用ansible-vault encrypt加密密码变量文件,或通过环境变量传递
  • sshpass会在进程列表中短暂暴露密码,敏感环境下谨慎使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:55:47