Ansible 本身不存密码,它是通过 SSH 登录到目标主机的。
所以你得解决“控制机(运行 ansible 的机器)怎么能无密码登录目标机”。
1. 最推荐的方式:SSH 密钥免密登录
步骤:
在控制机上生成密钥对(如果没有):
ssh-keygen -t rsa -b 4096
一路回车,会在 ~/.ssh/id_rsa
和 ~/.ssh/id_rsa.pub
生成。
然后把公钥复制到目标机:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.10
或者手动把 id_rsa.pub
的内容追加到目标机 ~/.ssh/authorized_keys
。
验证:
ssh user@192.168.1.10
如果能直接登录,不用密码,就成功了。
之后 Ansible 就能直接用这个私钥登录。
2. 如果必须用密码
有两种方式:
临时用密码登录
执行命令时加 -k
参数:
ansible all -m ping -k
它会提示你输入 SSH 密码。
Playbook 里用密码
也可以在 inventory.ini
里指定:
[webservers]
192.168.1.10 ansible_user=root ansible_password=123456
但这种方式 不推荐(明文密码,风险大)。
3. sudo 提权密码
如果目标机要求 sudo
输入密码(比如 Ubuntu 默认的 ubuntu
用户),还需要加:
ansible-playbook site.yml -K
它会提示你输入 sudo 密码。
或者在 inventory
里写:
192.168.1.11 ansible_user=ubuntu ansible_become_pass=你的sudo密码
总结
- 标准做法:配置 SSH 免密钥登录,Ansible 就能无感知地连接。
- 临时测试:
-k
输密码。 - 需要 sudo:
-K
输 sudo 密码。