ansible: store host password
This commit is contained in:
75
system/ansible/store_password.md
Normal file
75
system/ansible/store_password.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
title: "Store Host Password"
|
||||
tags: [ "system", "ansible" ]
|
||||
---
|
||||
|
||||
Make a hosts file with one host (your computer) and one variable, just to test:
|
||||
|
||||
```sh
|
||||
hosts_file=hosts
|
||||
fort="$(fortune -s | head -1)"
|
||||
cowvar=cowsays
|
||||
|
||||
echo "[cows]
|
||||
$HOSTNAME $cowvar='${fort}'" > "${hosts_file}"
|
||||
```
|
||||
|
||||
Now ansible should be able to show that '${cowvar}' in a debug message:
|
||||
|
||||
```sh
|
||||
ansible -i "$hosts_file" -m debug -a "msg='{{ ${cowvar} }}'" $HOSTNAME
|
||||
```
|
||||
|
||||
Now to convert the hosts file to yaml, because it's very fashionable:
|
||||
|
||||
|
||||
```sh
|
||||
yaml_hosts=hosts.yaml
|
||||
ansible-inventory -i ${hosts_file} --list -y | tee "${yaml_hosts}"
|
||||
```
|
||||
|
||||
Now you should see where the `cowsays` variable goes.
|
||||
You can safely place your `sudo` password next to that variable goes with `ansible-vault`, which will encrypt just that string.
|
||||
|
||||
```sh
|
||||
pass="your password"
|
||||
ansible-vault encrypt_string --name='ansible_sudo_pass' "${pass}"
|
||||
```
|
||||
|
||||
If that works, you can add the password, but in `yaml` format.
|
||||
You can do this manually, or use `gawk` to add ten spaces in front of the lines:
|
||||
|
||||
```sh
|
||||
pass="your password"
|
||||
ansible-vault encrypt_string --name='ansible_sudo_pass' "${pass}" | awk '{print " " $0}' >> "${yaml_hosts}"
|
||||
```
|
||||
|
||||
Now to check that the inventory file works okay:
|
||||
|
||||
```sh
|
||||
ansible-inventory -i ${yaml_hosts} --list -y
|
||||
ansible -i "$hosts_file" -m debug -a "msg='{{ ${cowvar} }}'" $HOSTNAME
|
||||
```
|
||||
|
||||
If that works, you can echo the debug message while becoming root.
|
||||
Just add the `-J` flag so it will ask for the password:
|
||||
|
||||
```sh
|
||||
ansible -i "${yaml_hosts}" -m debug -a "msg='{{ ${cowvar} }}'" $HOSTNAME --become -J
|
||||
ansible -i "${yaml_hosts}" -m debug -a "msg={{ ansible_sudo_pass }}" $HOSTNAME --become -J
|
||||
```
|
||||
|
||||
Now you can update using Ansible.
|
||||
|
||||
For Arch Linux:
|
||||
|
||||
```sh
|
||||
ansible -i "${yaml_hosts}" -m community.general.pacman -a 'upgrade=true update_cache=true' $HOSTNAME --become -J
|
||||
```
|
||||
|
||||
For Debian:
|
||||
|
||||
```sh
|
||||
ansible -i "${yaml_hosts}" -m ansible.builtin.apt -a 'upgrade=full' $HOSTNAME --become -J
|
||||
```
|
||||
|
Reference in New Issue
Block a user