Ansible 在角色中设置 ansible_user 和 ansible_ssh_pass

pi3*_*314 3 ansible

我正在 ansible 中创建我的第一个角色,通过 apt 安装软件包,因为这是我每天都会做的任务。

\n
apt\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\n
Run Code Online (Sandbox Code Playgroud)\n

为了安装软件包,我必须指定 ssh 用户,但我不知道在哪里指定它。

\n

我的想法是用变量来指示参数,与此类似

\n
  ansible_user: "{{ myuser }}"\n  ansible_ssh_pass: "{{ mypass }}"\n  ansible_become_pass: "{{ mypass }}"\n
Run 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。在生产环境中是不可接受的。

考虑使用查找插件(例如envfile)从控制器动态呈现密码机密并防止泄漏。

#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 允许您加密静态数据,并在清单/播放中引用它,而不会造成泄露风险。

查看此链接以了解可用的程序并开始使用。