我正在 ansible 中创建我的第一个角色,通过 apt 安装软件包,因为这是我每天都会做的任务。
\napt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apt_install_package.yaml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 server.yaml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tasks\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vars\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yaml\n\n# file: apt_install_package.yaml\n\n- name: apt role\n hosts: server\n gather_facts: no\n become: yes\n roles:\n - apt\n\n# tasks\n- name: install package\n apt: \n name: "{{ package }}" \n state: present\n update_cache: True\n with_items: "{{ package }}"\n\n#vars\n---\npackage:\n - nginx\n - supervisor\n\n#inventory\n---\nserver:\n hosts:\n new-server:\n ansible_host: 10.54.x.x\n\n\nRun Code Online (Sandbox Code Playgroud)\n为了安装软件包,我必须指定 ssh 用户,但我不知道在哪里指定它。
\n我的想法是用变量来指示参数,与此类似
\n ansible_user: "{{ myuser }}"\n ansible_ssh_pass: "{{ mypass }}"\n ansible_become_pass: "{{ mypass }}"\nRun Code Online (Sandbox Code Playgroud)\n有什么建议吗??
\n问候,
\n小智 6
根据Ansible 关于清单源的最新文档,对于任何给定的主机或主机组条目,可以使用ansible_password关键字配置 SSH 密码,同时通过关键字指定 SSH 用户。ansible_user
值得一提的是,为了实现 Ansible 主机的 SSH 密码登录,需要在控制器上安装sshpass程序。否则,由于初始化连接时注入密码错误,任何播放都将失败。
按以下方式在现有库存中定义这些关键字:
#inventory
---
server:
hosts:
new-server:
ansible_host: 10.54.x.x
ansible_user: <username>
ansible_password: <password>
ansible_become_password; <password>
Run Code Online (Sandbox Code Playgroud)
YAML 插件将从库存源解析您的主机配置参数,并将附加用于建立 SSH 连接的主机/组变量。
这种情况下的主要缺点是您的身份验证密钥将以纯文本形式存储,并且通常 Ansible 是致力于源代码控制存储库的 IaC。在生产环境中是不可接受的。
考虑使用查找插件(例如env或file)从控制器动态呈现密码机密并防止泄漏。
#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') }}"
Run Code Online (Sandbox Code Playgroud)
根据您的用例,其他查找插件也可能对您有用,并且可以在此处进一步研究。
或者,您可以在 Ansible 配置文件(通常位于/etc/ansible/ansible.cfg.
在此处阅读有关 Ansible 中可用配置选项的更多信息。
所有三个提到的配置选项都可以在 INI 部分下指定[defaults]为:
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 ...
这种方法的效率相当低,除非您更新控制器上 Ansible 运行用户的 shell 配置文件以在登录时自动设置这些变量。通常不建议用于密码等敏感数据。
就安全性而言,只要可能,首选 SSH 密钥对身份验证。然而,第二好的方法是使用 来保管敏感密码ansible-vault。
Vault 允许您加密静态数据,并在清单/播放中引用它,而不会造成泄露风险。
查看此链接以了解可用的程序并开始使用。