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

Ansible通过跳板机执行playbook提示密码无效错误如何解决?

问题根因

你遇到的报错核心原因是:当前Ansible配置仅提供了目标主机的SSH登录密码,但通过跳板机建立连接时需要先后完成「跳板机身份验证」和「目标主机身份验证」两次校验,你手动执行SSH时是交互式输入两次密码,而Ansible默认不会自动处理跳板机的密码输入,因此触发密码错误。
Mac上运行正常是因为你的Mac设备大概率已经配置了跳板机的SSH密钥免密登录,不需要额外输入跳板机密码,仅用目标主机密码即可完成完整链路验证。

解决方案

按易用性和安全性推荐优先级如下:

方案一:配置跳板机SSH密钥免密登录(最推荐)

该方案不需要修改现有Ansible配置,一劳永逸解决问题:

  1. 在VirtualBox的Linux虚拟机中执行命令生成SSH密钥:
    ssh-keygen -t rsa -b 4096
    所有提示直接回车即可,无需设置密钥密码。
  2. 将生成的公钥上传到跳板机的授权列表中:
    ssh-copy-id 你的跳板机用户名@跳板机地址
    按提示输入跳板机密码完成上传。
  3. 验证配置是否生效:执行手动SSH命令连接目标主机,此时不需要再输入跳板机密码,仅需输入目标主机密码即可登录。
    配置完成后重新运行Ansible命令即可正常执行。

方案二:配置Ansible自动传入跳板机密码

如果无法配置跳板机密钥免密,可通过sshpass工具自动传入跳板机密码:

  1. 先在Linux虚拟机中安装sshpass:
    yum install -y sshpass (适用于CentOS/RHEL系系统)
    apt install -y sshpass (适用于Debian/Ubuntu系系统)
  2. 修改inventory配置中的ansible_ssh_common_args参数,用环境变量传入跳板机密码,避免明文写死:
ansible_ssh_common_args: -o ProxyCommand="sshpass -p '{{ lookup('env', 'JUMP_HOST_PASSWORD') }}' ssh -W %h:%p 你的跳板机用户名@jumphost" -o PubkeyAuthentication=no -o PreferredAuthentications=password -o PasswordAuthentication=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

注意:移除原有配置中的ControlMaster=auto和ControlPersist=60s参数,VirtualBox NAT网络下连接复用极易出现传输异常,就是你报错中sftp/scp失败的诱因。
3. 运行Ansible命令时新增跳板机密码环境变量即可:
JUMP_HOST_PASSWORD='跳板机密码' ANSIBLE_SSH_USER='toor' ANSIBLE_SSH_PASSWORD='目标主机密码' ansible-playbook -i inventories/inventory.yml -l cluster1 playbooks/deploy-monitoring.yml

方案三:本地SSH配置统一管理

你也可以把所有SSH参数写到虚拟机本地的~/.ssh/config文件中,Ansible会自动读取该配置,不需要在inventory中重复定义:

  1. 编辑~/.ssh/config文件,添加如下配置:
# 跳板机配置
Host jumphost
  HostName 跳板机实际IP/域名
  User 跳板机用户名
  PubkeyAuthentication no
  PasswordAuthentication yes
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null

# 目标主机段配置
Host 192.168.0.*
  User toor
  ProxyJump jumphost
  PubkeyAuthentication no
  PasswordAuthentication yes
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null

如果你的OpenSSH版本低于7.3不支持ProxyJump,将ProxyJump jumphost替换为ProxyCommand ssh -W %h:%p jumphost即可。
2. 移除inventory配置中ansible_ssh_common_args、ansible_user两个变量,重新运行Ansible命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:57:02