Jak používat přihlašování pomocí hesla SSH v Ansible pomocí sshpass

V tomto článku vám ukážu, jak spouštět playbooky Ansible pomocí přihlašování pomocí hesla SSH pomocí sshpass.

Předpoklady

Pokud si chcete vyzkoušet příklady probírané v tomto článku,

1) Musíte mít na svém počítači nainstalovaný Ansible.
2) Musíte mít alespoň hostitele Ubuntu/Debian, ke kterému se můžete z Ansible připojit.

Na LinuxHintu je mnoho článků věnovaných instalaci Ansible. V případě potřeby se na ně můžete podívat a nainstalovat potřebné programy do svého systému.

Na svém počítači, kde byste měli mít Ansible nainstalovaný, budete také potřebovat mít nainstalovaný sshpass. V tomto článku vám ukážu, jak nainstalovat sshpass v Ubuntu/Debianu a CentOS/RHEL. Nebojte se, pokud tyto programy v systému ještě nemáte nainstalované.

Instalace sshpass v Ubuntu/Debian

Program sshpass je k dispozici v oficiálním repozitáři balíčků Ubuntu/Debian. Tento program můžete snadno nainstalovat do svého počítače.

Nejprve aktualizujte mezipaměť úložiště balíčků APT pomocí následujícího příkazu:

$ sudo apt update

Nyní nainstalujte sshpass pomocí následujícího příkazu:

$ sudo apt install sshpass -y

sshpass by nyní měl být nainstalován.

Instalace sshpass v CentOS 8/RHEL 8

sshpass je k dispozici v repozitáři EPEL systému CentOS 8/RHEL 8. Pro instalaci sshpass musíte mít povolen repozitář EPEL.

Nejprve aktualizujte mezipaměť úložiště balíčků DNF pomocí následujícího příkazu:

$ sudo dnf makecache

Následujícím příkazem nainstalujte balíček úložiště EPEL:

$ sudo dnf install epel-release -y

Balíček úložiště EPEL by nyní měl být nainstalován a úložiště EPEL by mělo být povoleno.

Znovu aktualizujte mezipaměť úložiště balíčků DNF následujícím způsobem:

$ sudo dnf makecache

Nainstalujte sshpass pomocí následujícího příkazu:

$ sudo dnf install sshpass -y

sshpass by měl být nainstalován.

Nastavení adresáře projektu Ansible

Než budeme pokračovat dále, bylo by dobré vytvořit adresářovou strukturu projektu, abychom měli ve věcech trochu pořádek.

Pro vytvoření adresáře projektu sshpass/ a všech potřebných podadresářů (v aktuálním pracovním adresáři) spusťte následující příkaz:

$ mkdir -pv sshpass/{soubory,playbooks}

Přejděte do adresáře projektu následujícím způsobem:

$ cd sshpass/

Vytvořte soubor hosts inventory následujícím způsobem:

$ nano hosts

Přidejte do inventárního souboru IP adresu hostitele nebo název DNS.

Po dokončení tohoto kroku uložte soubor stisknutím <Ctrl> + X, následně Y a <Enter>.

Vytvořte konfigurační soubor Ansible v adresáři projektu takto:

$ nano ansible.cfg

Nyní do souboru ansible.cfg zadejte následující řádky.

Jakmile dokončíte tento krok, uložte soubor stisknutím <Ctrl> + X, následně Y a <Enter>.

Testování přihlašování SSH pomocí hesla v systému Ansible

Následujícím způsobem zkuste provést ping na hostitele v inventárním souboru:

$ ansible all -u shovon -m ping

POZNÁMKA: Zde je použita volba -u, která říká systému ansible, jako který uživatel se má přihlásit. V tomto případě to bude uživatel shovon. Od této chvíle v celé ukázce nahraďte toto uživatelské jméno svým.

Jak vidíte, nejsem schopen se přihlásit k hostiteli a spustit žádné příkazy.

Chcete-li Ansible přinutit, aby se zeptal na heslo uživatele, spusťte příkaz ansible s argumentem -ask-pass takto:

$ ansible all -u shovon –ask-pass -m ping

Jak vidíte, Ansible se zeptá na heslo SSH uživatele. Nyní zadejte heslo SSH (přihlašovací heslo uživatele) a stiskněte klávesu <Enter>.

Hostitel může být pingován, a to následujícím způsobem:

Přihlášení SSH pomocí hesla pro playbooky Ansible

Při spouštění playbooků Ansible můžete použít přihlášení SSH pomocí hesla. Podívejme se na příklad.

Nejprve vytvořte nový playbook askpass1.yaml v adresáři playbooks/ takto:

$ nano playbooks/askpass1.yaml

V adresáři askpass1 zadejte následující řádky.yaml playbook file:

– hosts: all
user: shovon
tasks:
– name: Ping all hosts
ping:
– name: Print a message
debug:
msg: ‚All set‘

Po dokončení tohoto kroku uložte soubor stisknutím <Ctrl> + X, následně Y a <Enter>.

Spusťte playbook askpass1.yaml následujícím způsobem:

$ ansible-playbook playbooks/askpass1.yaml

Jak vidíte, nedaří se mi připojit k hostiteli. Je vidět, že je to proto, že jsem příkaz ansible-playbook nespustil s volbou -ask-pass.

Spustil jsem příkaz askpass1.yaml playbook s volbou -ask-pass takto:

$ ansible-playbook -ask-pass playbooks/askpass1.yaml

Jak vidíte, Ansible se ptá na heslo SSH. Zadejte heslo SSH a stiskněte <Enter>.

Příkaz playbook askpass1.yaml by se nyní měl úspěšně spustit.

Ansible sudo Password Login for Playbooks

Volba -ask-pass se bude ptát pouze na přihlašovací heslo SSH. Co když chcete zadat také heslo sudo? V dalších krocích uvidíte, jak to udělat.

Nejprve vytvořte nový playbook askpass2.yaml v adresáři playbooks/ takto:

$ nano playbooks/askpass2.yaml

V souboru askpass2.yaml zadejte následující řádky.

– hosts: all
user: shovon
become: Název: Nainstalujte balíček apache2
apt:
name: apache2
state: latest
– název: Ujistěte se, že služba apache2 běží
service:
name: apache2
state: started
enabled: Název: Zkopírovat soubor index.html na server
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
vlastník: www-data
skupina: www-data

Zde jsem použil příkaz become: Příkazem true jsem Ansible řekl, aby tento playbook spouštěla s právy sudo. Po dokončení tohoto kroku uložte soubor askpass2.yaml stisknutím kláves <Ctrl> + X, následně Y a <Enter>.

Vytvořte index.html v adresáři files/ takto:

$ nano files/index.html

V souboru index.html zadejte následující kódy HTML:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>To funguje</p>
</body>
</html>

Po dokončení tohoto kroku, uložte soubor stisknutím kláves <Ctrl> + X a následně Y a <Enter>.

Příkaz playbook askpass2.yaml můžete spustit s volbou -ask-pass takto:

$ ansible-playbook –ask-pass playbooks/askpass2.yaml

Poté budete stejně jako dříve požádáni o zadání hesla SSH.

Ale i po zadání hesla SSH nemusí být kniha her spuštěna. Důvodem je to, že musíte Ansible říct, aby se kromě hesla SSH zeptala i na heslo sudo.

Ansible můžete říct, aby se při spouštění playbooku zeptala na heslo sudo pomocí volby -ask-become-pass takto:

$ ansible-playbook –ask-pass –ask-become-pass playbooks/askpass2.yaml

Nyní se vás Ansible zeptá na heslo SSH.

Dále se vás Ansible zeptá na heslo sudo. Pokud je vaše heslo sudo stejné jako heslo SSH (což je nejpravděpodobnější), nechte ho prázdné a stiskněte <Enter>.

Jak vidíte, příručka pro přehrávání úspěšně proběhla.

Konfigurace automatického přihlašování SSH a sudo heslem

Možná budete chtít používat přihlašování SSH a sudo heslem, ale nechcete zadávat heslo SSH a sudo při každém spuštění playbooku. V takovém případě je tato část určena právě vám.

Chcete-li používat přihlašování SSH a sudo založené na heslech, aniž byste byli vyzváni k zadání hesel, stačí přidat proměnné ansible_ssh_pass a ansible_become_pass hostitele nebo proměnné skupiny do inventárního souboru.

Nejprve otevřete inventární soubor hosts následujícím způsobem:

$ nano hosts

Pokud máte v inventárním souboru více hostitelů a každý z nich má jiné heslo, přidejte proměnné ansible_ssh_pass a ansible_become_pass jako proměnné hostitele (za každého hostitele) následujícím způsobem.

Nezapomeňte nahradit secret heslem SSH a sudo.

Pokud mají všichni nebo někteří hostitelé stejné heslo, pak můžete přidat proměnné ansible_ssh_pass a ansible_become_pass jako skupinové proměnné, jak je uvedeno v příkladu níže.

Tady mám pouze jednoho hostitele, takže jsem přidal proměnné ansible_ssh_pass a ansible_become_pass pro skupinu all (všichni hostitelé v inventárním souboru). Tyto proměnné však můžete přidat i pro jiné konkrétní skupiny.

Jakmile dokončíte přidání proměnných ansible_ssh_pass a ansible_become_pass do inventárního souboru hosts, uložte inventární soubor hosts stisknutím <Ctrl> + X, následně Y a <Enter>.

Příkaz askpass2 nyní můžete spustit.yaml následujícím způsobem:

$ ansible-playbook playbooks/askpass2.yaml

Jak vidíte, playbook se úspěšně spustil, ačkoli se neptal na heslo SSH ani na heslo sudo.

Takto tedy v Ansible používáte sshpass pro přihlášení SSH a sudo pomocí hesla. Děkujeme, že jste si přečetli tento článek!