Ansible 默认使用 SSH 协议进行无密码通信,即通过 SSH 密钥对来进行身份验证。但是,在某些情况下,如果您想通过用户名和密码登录 Linux 服务器,Ansible 也是支持这种做法的,尤其是针对一些临时性的或特殊情况下的自动化任务。这通常通过使用 --ask-pass
和 --private-key
参数配合 sshpass
工具,或者配置 ansible_password
变量和 ansible_ssh_pass
(旧版本中使用)来实现。
使用用户名和密码登录的基本方法如下:
- 使用命令行参数传递密码:
bash
ansible-playbook playbook.yml --ask-pass
当运行该命令时,Ansible 会在执行过程中提示输入密码。
- 在环境变量中设置密码:
bash
export ANSIBLE_HOST_KEY_CHECKING=False
export ANSIBLE_PASSWORD="yourpassword"
ansible-playbook playbook.yml
注意:这种方法不够安全,因为它将在环境变量中明文存储密码。
- 在 inventory 文件中指定密码: 在 inventory 文件的主机部分设置
ansible_password
变量:
ini
[webservers]
webserver.example.com ansible_user=remote_user ansible_password=mysecretpassword
然而,由于密码在命令行历史记录中可能会被记录下来,或在其他地方容易暴露,因此强烈建议使用 SSH 密钥对进行认证,这是更安全的做法。如需临时使用密码认证,可以结合 sshpass
工具来传递密码,但这同样不是一个最佳实践,因为其安全性较低。
在企业环境中,为了避免密码凭证的安全风险,通常会利用 Vault 功能加密敏感数据,或者通过其他认证机制(如 Kerberos 或 LDAP)来提升自动化运维的安全性。