我正在 ansible 中创建我的第一个角色,通过 apt 安装软件包,因为这是我每天都会做的任务。
apt
├── apt_install_package.yaml
├── server.yaml
├── tasks
│ └── main.yaml
└── vars
└── main.yaml
# file: apt_install_package.yaml
- name: apt role
hosts: server
gather_facts: no
become: yes
roles:
- apt
# tasks
- name: install package
apt:
name: "{{ package }}"
state: present
update_cache: True
with_items: "{{ package }}"
#vars
---
package:
- nginx
- supervisor
#inventory
---
server:
hosts:
new-server:
ansible_host: 10.54.x.x
为了安装软件包,我必须指定 ssh 用户,但我不知道在哪里指定。
我的想法是用变量来表示参数,类似于这样
ansible_user: "{{ myuser }}"
ansible_ssh_pass: "{{ mypass }}"
ansible_become_pass: "{{ mypass }}"
有什么建议吗?
问候,
最佳答案
根据 latest documentation对于任何给定的主机或主机组条目,在 Ansible 中,关于 list 源,可以使用 ansible_password
关键字配置 SSH 密码,同时通过 ansible_user
关键字指定 SSH 用户。
值得一提的是,为了使用Ansible实现主机的SSH密码登录,sshpass Controller 上需要程序。否则,由于初始化连接时注入(inject)密码错误,任何播放都会失败。
按以下方式在现有广告资源中定义这些关键字:
#inventory
---
server:
hosts:
new-server:
ansible_host: 10.54.x.x
ansible_user: <username>
ansible_password: <password>
ansible_become_password; <password>
YAML 插件将从 list 源解析您的主机配置参数,并将附加用于建立 SSH 连接的主机/组变量。
这种情况下的主要缺点是您的身份验证 key 将以纯文本形式存储,并且通常 Ansible 是致力于源代码控制存储库的 IaC。在生产环境中 Not Acceptable 。
考虑使用查找插件,例如 env或file从 Controller 动态呈现密码 secret 并防止泄露。
#inventory
---
server:
hosts:
new-server:
ansible_host: 10.54.x.x
ansible_user: "{{ lookup('env', 'MY_SECRET_ANSIBLE_USER') }}"
ansible_password: "{{ lookup('file', '/path/to/password') }}"
ansible_become_password; "{{ lookup('env', 'MY_SECRET_BECOME_PASSWORD') }}"
根据您的用例,其他查找插件也可能对您有用,并且可以进一步研究 here .
或者,您可以在 Ansible 配置文件中单独指定默认远程连接用户、连接用户密码和密码,该文件通常位于 /etc/ansible/ansible.cfg
。
了解有关 Ansible 中可用配置选项的更多信息 here .
所有三个提到的配置选项都可以在[defaults]
INI 部分下指定为:
remote_user
:默认连接用户名
connection_password_file
:默认连接密码文件
become_password_file
:默认成为密码文件
注意:connection_password_file
和 become_password_file
必须是包含 Ansible 用于登录或升级权限的密码的文件系统路径。不支持在配置文件中将默认密码存储为纯文本字符串。
另一个选项涉及剧本执行时存在的环境变量。在 playbook 执行时导出或通过命令行显式传递它们。
ANSIBLE_REMOTE_USER
:默认连接用户名
ANSIBLE_CONNECTION_PASSWORD_FILE
:默认连接密码文件
ANSIBLE_BECOME_PASSWORD_FILE
:默认成为密码文件
比如下面这样:
ANSIBLE_BECOME_PASSWORD_FILE="/path/to/become_password"ansible-playbook ...
除非您更新 Controller 上 Ansible 运行用户的 shell 配置文件以在登录时自动设置这些变量,否则这种方法的效率要低得多。通常不建议用于密码等敏感数据。
就安全性而言,尽可能首选 SSH key 对身份验证。但是,第二种最佳方法是使用 ansible-vault
来保管敏感密码。
Vault 允许您加密静态数据,并在库存/播放中引用它,而不会造成泄露风险。
查看此link了解可用程序并开始使用。
关于Ansible 在角色中设置 ansible_user 和 ansible_ssh_pass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70992112/