簡體   English   中英

如何將ansible_become_pass存儲在保管庫中以及如何使用它?

[英]How to store ansible_become_pass in a vault and how to use it?

我是ansible的新手,並且我使用一個非常簡單的劇本在幾台服務器上發布sudo apt-get updatesudo apt-get upgrade

這是我正在使用的劇本:

---

- name: Update Servers
  hosts: my-servers
  become: yes
  become_user: root
  tasks:
    - name: update packages
      apt: update_cache=yes

    - name: upgrade packages
      apt: upgrade=dist

這是我的~/.ansible/inventory/hosts文件的摘錄:

[my-servers]
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-francisco>
san-diego     ansible_host=san-diego     ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-diego>

這是我啟動該劇本所得到的:

$ ansible-playbook update-servers-playbook.yml                                                                                                                                     

PLAY [Update Servers] **********************************************************

TASK [setup] *******************************************************************
ok: [san-francisco]
ok: [san-diego]

TASK [update packages] *********************************************************
ok: [san-francisco]
ok: [san-diego]

TASK [upgrade packages] ********************************************************
ok: [san-francisco]
ok: [san-diego]

PLAY RECAP *********************************************************************
san-francisco              : ok=3    changed=0    unreachable=0    failed=0   
san-diego                  : ok=3    changed=0    unreachable=0    failed=0

讓我困擾的是我的用戶user密碼以明文形式存儲在~/.ansible/inventory/hosts文件中。

我已經閱讀了有關保管庫的信息 ,也了解了有關變量和保管庫最佳做法,但是我不知道如何將其應用於我的最小用例。

我也嘗試使用查找 通常,它們也可以在清單文件中工作,而我可以執行以下操作:

[my-servers]
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass="{{ lookup('env', 'ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO') }}"

在這種情況下,密碼將存儲在名為ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO的環境變量中; 據我所知,沒有辦法在金庫中查找變量。

因此,如何組織文件,以便能夠從某個地方查找密碼並將其安全存儲?

您需要創建一些拱形變量文件,然后將其包括在您的劇本或命令行中。

如果將清單文件更改為使用變量作為通行證,則可以存儲此變量:

[my-servers]
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass='{{ sanfrancisco_become_pass }}'
san-diego     ansible_host=san-diego     ansible_ssh_user=user ansible_become_pass='{{ sandiego_become_pass }}'

然后使用ansible-vault create vaulted_vars.yml創建具有以下內容的存儲文件:

sanfrancisco_become_pass: <my_sudo_password_for_user_on_san-francisco>
sandiego_become_pass    : <my_sudo_password_for_user_on_san-diego>

然后,將像這樣的文件作為額外的變量包括在內:

ansible-playbook -i ~/.ansible/inventory/hosts playbook.yml --ask-vault-pass -e@~/.ansible/inventory/vault_vars

或通過include_vars任務將vars文件包括在您的劇本中:

- name        : include vaulted variables
  include_vars: ~/.ansible/inventory/vault_vars

用您自己的相關設置設置清單后。 這些設置假定您已經設置了rsa-key對來訪問服務器。 您應該能夠使用ssh remoteuser@155.42.88.199 SSH進入服務器

[local]
localhost    ansible_connection=local

[remote]
155.42.88.199   ansible_connection=ssh    ansible_user=remoteuser ansible_become_user=root ansible_become=yes  ansible_ssh_private_key_file=<private_key_file_path>

您需要將您的根密碼存儲在一個文件中(我叫我的“ my_vault.yml”)。 您可以使用以下命令執行此操作:

~/.ansible$ ansible-vault create my_vault.yml

只需按以下方式存儲遠程服務器密碼(不包括'<>'標記)

su_password: <myreallyspecialpassword> 

現在,密碼將由Vault加密,查看此密碼的唯一方法是輸入以下命令。

~/.ansible$ ansible-vault edit my_vault.yml

現在,我們需要在我們的劇本中包含“ my_vault.yml”文件。 我們可以使用vars-files來獲取su-password的值。 現在,我們可以創建一個名為ansible_become_pass ,該變量將傳遞自my_vault.yml文件中的值,這將使我們的my_vault.yml用戶可以在服務器上運行一次。

---
- name: My Awesome Playbook
  hosts: remote
  become: yes

  vars_files:
    - ~/.ansible/my_vault.yml 

  vars:
    ansible_become_pass: '{{ su_password }}'

  roles:
      - some_awesome_role

每次我們要運行此劇本時都在使用保管庫,因此我們需要使用以下命令。

ansible-playbook myawesome_playbook.yml --ask-vault-pass

解決此問題的最佳方法是使用host_vars。 最簡單的設置是將ansible_become_pass放入相應host_vars目錄中的Vault加密文件中,如下所示:

myplaybook.yml
host_vars/onehost.com/crypted
host_vars/otherhost.com/crypted

crypted文件中,放置ansible_become_pass變量的分配:

ansible_become_pass: SuperSecre3t

使用ansible-vault create創建文件,使用ansible-vault edit

按照Ansible文檔中建議,您需要為每個主機創建一個附加文件,該ansible_become_passwd從名稱不同的加密變量中分配ansible_become_passwd 這樣,可以在項目文件中搜索ansible_become_passwd

myplaybook.yml
host_vars/onehost.com/plain
host_vars/onehost.com/crypted
host_vars/otherhost.com/plain
host_vars/otherhost.com/crypted

plain文件包含以下內容:

ansible_become_pass: "{{ vaulted_become_pass }}"

crypted文件將設置vaulted_become_pass所示。

所有crypted文件必須使用相同的密鑰加密,並且ansible-playbook必須使用--ask-vault-pass調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM