Ubuntu server - ansible - vault password

Ubuntu server - ansible - vault password
« kdy: 05. 08. 2021, 09:39:37 »
zdravím.
Potřebuji poradit.  Ubuntu server 20.04, ansible 2.9.6, python 3.8.10.
Vygenerované heslo pro "spravce" a uloženo do jeho složky
Kód: [Vybrat]
/home/spravce/.ssh/password.yml .
V ansible.cfg jsou nastaveny:
Kód: [Vybrat]
private_key_file = /home/spravce/.ssh/spravce_id_rsa.ppk
vault_password_file = /home/spravce/.ssh/password.yml
[privilege_escalation]
become=True
become_method=sudo
become_user=spravce
become_ask_pass=False

Podle návodu https://docs.ansible.com/ansible/2.4/playbooks_vault.html mám v
Kód: [Vybrat]
/home/spravce/.bashrcnastaveno toto:
Kód: [Vybrat]
ANSIBLE_VAULT_PASSWORD_FILE=/home/spravce/.ssh/password.yml
odhlášen spravce, přihlašen spravce
a chyba:
Kód: [Vybrat]
spravce@sachlj:~$ ansible debian -m ping
[WARNING]: Error in vault password file loading (default): A vault password must be specified to decrypt data
ERROR! A vault password must be specified to decrypt data
spravce@sachlj:~$

Tak kde je ještě chyba? Poradíte?


robac

  • ***
  • 198
    • Zobrazit profil
    • E-mail
Re:Ubuntu server - ansible - vault password
« Odpověď #1 kdy: 05. 08. 2021, 10:06:11 »
První, co jednoho zaujme, je, že na začátku dokumentace, kterou používáte je výrazně sděleno:
You are reading an unmaintained version of the Ansible documentation.

Re:Ubuntu server - ansible - vault password
« Odpověď #2 kdy: 05. 08. 2021, 10:16:00 »
Dobře a kde je tedy chyba?
Oni v té aktuální dokumentaci toho moc nepíší: https://docs.ansible.com/ansible/latest/cli/ansible-vault.html
« Poslední změna: 05. 08. 2021, 10:22:03 od Jiří Šachl »

Re:Ubuntu server - ansible - vault password
« Odpověď #3 kdy: 05. 08. 2021, 13:08:17 »
Jak jsi generoval password.yml?

Re:Ubuntu server - ansible - vault password
« Odpověď #4 kdy: 05. 08. 2021, 13:13:33 »
mezitím jsem trochu pokročil..takže jinak s otázkou.
Co potřebuji. v hosts nechat jen ip adresy serverů rozdělené podle distra. To mám. Jen čisté ip adresy.
v ansible.cfg mít popsáno kdo se připojuje - spravce, že je sudo, a cestu k jeho klíči, mám. a teď potřebuji heslo k tomu klíči ale aby bylo zašifrované v souboru kterýmu bude ansible rozumět. To všechno kvůli bezpečnosti když "jeden prsten vládne všem". Prostě aby se komunikace probíhoala šifrovaně, přihlašování pomocí ssh klíčů a heslo aby bylo šifrované.
A ať hledám a zkouším tak se mi nedaří abych vyhověl tomuhle:
Kód: [Vybrat]
# If set, configures the path to the Vault password file as an alternative to
# specifying --vault-password-file on the command line.
vault_password_file = /home/spravce/.ssh/password.yml


Re:Ubuntu server - ansible - vault password
« Odpověď #5 kdy: 05. 08. 2021, 14:20:11 »
podle návodu jsem příkazem:
Kód: [Vybrat]
ansible-vault create --vault-password-file /home/spravce/.ssh/heslo /home/spravce/.ssh/password.ymlkdy v souboru "heslo" je (dejme tomu) jen
Kód: [Vybrat]
Heslo. vault vygeneroval soubor
Kód: [Vybrat]
password.ymlkdyž v ansible.cfg zapnu
Kód: [Vybrat]
vault_password_file = /home/spravce/.ssh/password.ymlpak :
Kód: [Vybrat]
spravce@sachlj:~/.ssh$ ansible all -m ping
[WARNING]: Error in vault password file loading (default): A vault password must be specified to decrypt data
ERROR! A vault password must be specified to decrypt data

Re:Ubuntu server - ansible - vault password
« Odpověď #6 kdy: 05. 08. 2021, 14:36:16 »
Bud musis zadat heslo rucne:
Kód: [Vybrat]
ansible-playbook --ask-vault-pass site.yml
Nebo ho mit nekde v souboru, kde si to ansible precte:
Kód: [Vybrat]
ansible-playbook --vault-password-file /path/to/my/vault-password-file site.yml
Dalsi varianta je na to mit vlastni script:
Kód: [Vybrat]
ansible-playbook --vault-password-file my-vault-password-client.py

Re:Ubuntu server - ansible - vault password
« Odpověď #7 kdy: 05. 08. 2021, 14:41:44 »
abych nemusel heslo zadávat ručně, což je na pikaču pokud jsou ansible scripty spouštěny cronem tak se v ansible.cfg zadává heslo do souboru, ale na dvojitou pikaču není nikde vysvětleno jak se ten soubor s heslem který vegeneruje...potřebuji tam mít heslo k souboru
Kód: [Vybrat]
private_key_file = když dám do hosts tohle:
Kód: [Vybrat]
xx.xx.xx.xxansible_ssh_private_key_file=/home/spravce/.ssh/spravce_id_rsa.ppk ansible_ssh_pass=heslotak mi
Kód: [Vybrat]
ansible all -m ping projde normálně a fungují všechny scripty..já ale to heslo chci mít zakryptované tak aby mu rozuměl jen ansible a nedalo se nijak zjistit..je to tak složité????

Re:Ubuntu server - ansible - vault password
« Odpověď #8 kdy: 05. 08. 2021, 15:22:36 »
Nj, ale tohle Ansible neumi. Kdyz mu clovek udela vault, tak ho taky musi nejak umet rozsifrovat -> dela to heslem, ktere musi nejak dostat. :) Jedina moznost (alespon bez dalsiho sw) je holt mit nekde "schovane" heslo v plain textu a mit ho citelne jen pro uzivatele, ktery ten ansible pousit.

Edit: Napada me jedna moznost, kterou jsem pouzival ve svych scriptech. Je to takova "Security through obscurity". Mit soubor s heslem zasifrovany gpg klicem (ktery vlastni dany uzivatel). A pomoci scriptu ten soubor desifrovat a poustet ansible treba jak jsem uvedl ten posledni prikaz:
Kód: [Vybrat]
ansible-playbook --vault-password-file my-vault-password-client.py
« Poslední změna: 05. 08. 2021, 15:27:44 od tr1l1ner »

Re:Ubuntu server - ansible - vault password
« Odpověď #9 kdy: 05. 08. 2021, 15:36:56 »
..já ale to heslo chci mít zakryptované tak aby mu rozuměl jen ansible a nedalo se nijak zjistit..je to tak složité????

BTW, tenhle pozadavek se mi zda absolutne nerealny. Bud neco zasifruji a zahodim klice, pak se k tomu nikdo nedostane. Nebo budu mit neco zasifrovane a od toho klice (popripade Ansible), ale pokud se k tomu klici dostane kdokoliv jiny, tak se dostane i k zasifrovanemu obsahu. Jedina moznost je, co nejvice stizit moznost uniku klicu do nepovolanych rukou. Pokud ale klice nekde existovat budou (a to musi, abych se k obsahu dostal), tak bude vzdy sance, ze je nekdo zneuzije.
Pak je jeste moznost, ze mi neco unika... :D

Re:Ubuntu server - ansible - vault password
« Odpověď #10 kdy: 05. 08. 2021, 15:38:39 »
díky, budu zkoušet, ale ansible by měl umět například : v ansible.cfg je možnost:
Kód: [Vybrat]
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=spravce
#become_ask_pass=False

když tohle povolím a v scriptu zakážu tohle:
Kód: [Vybrat]
remote_user: spravce
  become: yes
  become_method: sudo

tak se mi script nespustí..přitom by ansible.cfg mělo mít přednost....a stejná direktiva by se měla vyčíst odsud...

Re:Ubuntu server - ansible - vault password
« Odpověď #11 kdy: 05. 08. 2021, 15:49:34 »
BTW, tenhle pozadavek se mi zda absolutne nerealny. Bud neco zasifruji a zahodim klice, pak se k tomu nikdo nedostane. Nebo budu mit neco zasifrovane a od toho klice (popripade Ansible), ale pokud se k tomu klici dostane kdokoliv jiny, tak se dostane i k zasifrovanemu obsahu. Jedina moznost je, co nejvice stizit moznost uniku klicu do nepovolanych rukou. Pokud ale klice nekde existovat budou (a to musi, abych se k obsahu dostal), tak bude vzdy sance, ze je nekdo zneuzije.
Pak je jeste moznost, ze mi neco unika... :D
ansible umožňuje připojení cestou ssh klíčů, tj šifrovaně, pokud se nepletu, osobní klíč je uložený ve složce .ssh uživatele co má sudo práva na všech řízených serverech. cesta ke klíči se dá nastavit v hosts:
Citace
ansible_ssh_private_key_file=cesta ke klíči
a nebo v ansible.cfg
Citace
private_key_file =cesta ke klíči
heslo k tomuto soukromému klíči se dá vložit otevřené (což by udělal jen idiot) do souboru hosts
Citace
ansible_ssh_pass=nějaké heslo
a nebo konečně správně do souboru který je zašifrovaný a rozumí mu jn ansible a to se určuje v ansible.cfg
Citace
vault_password_file =nějaké heslo
. jenže nikde jsem byhen dneškas nenašel jak ten
Citace
vault_password_file
vygenerovat, jako má mít strukturu aby tomu ansible rozuměl. když dám heslo do souboru hosts tak tomu rozumí a normálně funguje...

Re:Ubuntu server - ansible - vault password
« Odpověď #12 kdy: 05. 08. 2021, 21:52:11 »
Citace
vault_password_file

V souboru, na nějž  se odkazujete direktivou vault_password_file, je jen jediný řádek, a v něm je zapsáno to heslo. Žádné další mašličky, dvojtečky, rovnítka a podobné ozdoby.

Dále doporučuji Vaší pozornosti https://stackoverflow.com/questions/51771994/how-do-i-use-an-encrypted-variable-ansible-ssh-pass-in-an-ini-file, včetně věty "It seems also, that the function AnsibleVaultEncryptedUnicode, which decrypts the value, is called only from the YAML parser"

No a nebo můžete ten problém zkusit řešit úplně jinak. Znáte program ssh-agent?

Re:Ubuntu server - ansible - vault password
« Odpověď #13 kdy: 06. 08. 2021, 08:37:13 »
zkusím to, díky...

Re:Ubuntu server - ansible - vault password
« Odpověď #14 kdy: 06. 08. 2021, 09:38:41 »
ne a ne to fungovat.
tak jsem zkusil podle návodu:
https://docs.ansible.com/ansible/latest/user_guide/vault.html
konkrétně:
Citace
ansible-vault encrypt_string --vault-password-file a_password_file 'foobar' --name 'the_secret'
vytvořit heslo co jsem zkopíroval do souboru password.yml na který se odkazuji v ansible.cfg.
odezva ansible je takováto:
Kód: [Vybrat]
spravce@ubuntuserver:~/.ssh$ ansible debian -m ping
[WARNING]: Error in vault password file loading (default): Problem running vault password script /home/spravce/.ssh/password.yml ([Errno 8] Exec format error: '/home/spravce/.ssh/password.yml'). If this
is not a script, remove the executable bit from the file.
ERROR! Problem running vault password script /home/spravce/.ssh/password.yml ([Errno 8] Exec format error: '/home/spravce/.ssh/password.yml'). If this is not a script, remove the executable bit from the fi             le.

původní chown 0755
změněno tedy na 0644 a odpověď ansiblu je:
Kód: [Vybrat]
10.10.10.183 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0755 for '/home/spravce/.ssh/spravce_id_rsa.ppk' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": bad permissions\r\nspravce@10.10.10.183: Permission denied (publickey,password).",
    "unreachable": true
chown na 0400
a ansible:
Kód: [Vybrat]
10.10.10.183 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Load key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": invalid format\r\nspravce@10.10.10.183: Permission denied (publickey,password).",
    "unreachable": true
ten ansible si neumí vybrat co chce.....
« Poslední změna: 06. 08. 2021, 09:43:14 od Jiří Šachl »