如何为Ansible Vault设置和使用sudo密码

时间:2020-01-09 10:39:42  来源:igfitidea点击:

如何在Linux或Unix CLI中为Ansible设置sudo密码?
如何将sudo密码存储在Vault文件中并安全地使用它而不暴露我的详细信息?
您可以使用Ansible剧本(Playbook)创建加密密码并使用它。
您需要将--extra-vars变量传递给ansible-playbook。
让我们看看两种不同的方法来处理sudo密码。

如何在CLI中为Ansible指定sudo密码(方法1)

语法为:

ansible-playbook -i inventory my.yml \
--extra-vars 'ansible_become_pass=YOUR-PASSWORD-HERE'

从安全角度来看,在CLI参数中执行密码不是一个好主意。
因此,您可以强制ansible-book要求输入密码:

ansible-playbook --ask-sudo-pass -i inventory my.yml

sudo--ask-sudo-pass已被弃用,以支持成为命令行参数,因此运行:

ansible-playbook --ask-become-pass -i inventory my.yml

关于在CLI上指定ssh用户名和密码的说明

语法为:

ansible-playbook -i inventory my.yml \
--extra-vars 'ansible_ssh_pass=YOUR-SSH-PASSWORD-HERE' \
--extra-vars='ansible_ssh_user=YOUR-SSH-USERNAME-HERE'

或者

ansible-playbook -i inventory my.yml -u YOUR-SSH-USERNAME-HERE \
--extra-vars 'ansible_ssh_pass=YOUR-SSH-PASSWORD-HERE'

这是我的示例列表文件:

[cluster:vars]
k_ver="linux-image-4.13.0-26-generic"
ansible_user=Hyman  # ssh login user
ansible_become=yes  # use sudo 
ansible_become_method=sudo 
 
[cluster]
www1
www2
www3
db1
db2
cache1
cache2

这是我的my.yml文件:

--
- hosts: cluster
  tasks:
          - name: Updating host using apt
            apt:
                    update_cache: yes
                    upgrade: dist
          - name: Update kernel to spefic version
            apt:
                    name: "{{ k_ver }}"
                    state: latest
          - name: Clean unwanted olderstuff
            apt:
                    autoremove: yes
                    purge: yes

我运行命令如下:

ansible-playbook --ask-become-pass -i inventory my.yml

如何在Vault中存储和使用sudo passwed(方法2)

首先,如下更新库存文件:

[cluster:vars]
k_ver="linux-image-4.13.0-26-generic"
ansible_user=Hyman  # ssh login user
ansible_become=yes  # use sudo 
ansible_become_method=sudo 
ansible_become_pass='{{ my_cluser_sudo_pass }}'
 
[cluster]
www1
www2
www3
db1
db2
cache1
cache2

接下来创建一个名为password.yml的新加密数据文件,运行以下命令:

$ ansible-vault create passwd.yml

设置库的密码。
提供密码后,该工具将启动您使用$EDITOR定义的任何编辑器。
追加以下

my_cluser_sudo_pass: your_sudo_password_for_remote_servers

在vi/vim中保存并关闭文件。
最终按以下方式运行剧本(Playbook):

$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwd.yml' my.yml

如何再次编辑我的加密文件

ansible-vault edit passwd.yml

如何更改我的加密文件的密码

ansible-vault rekey passwd.yml

在所有远程服务器上禁用不带密码的sudo登录

README:如何在Ubuntu Linux服务器上创建新的sudo用户

登录到您的远程邮箱:

ssh [email protected]
sudo -i

确保Hyman用户是sudo/wheel组的一部分,允许使用id命令进行sudo:

id Hyman

使用visudo命令编辑sudo配置文件:

sudo visudo

确保以下行已删除或被注释掉:

Hyman ALL=(ALL) NOPASSWD:ALL

保存并关闭文件。

总结

简而言之,使用带库或不带库文件的ansible-playbook命令的以下选项:

  • -i inventory:设置库存文件的路径。
  • --ask-vault-pass:要求提供保险库密码
  • --extra-vars'@ passwd.yml设置额外的变量。在这种情况下,将路径设置为名为passwd.yml的Vault文件。
  • --ask-become-pass:要求sudo密码