Jak używać logowania opartego na haśle SSH w Ansible przy użyciu sshpass

W tym artykule pokażę, jak uruchamiać playbooki Ansible przy użyciu logowania opartego na haśle SSH przy użyciu sshpass.

Wymagania wstępne

Jeśli chcesz wypróbować przykłady omówione w tym artykule,

1) Musisz mieć zainstalowane Ansible na swoim komputerze.
2) Musisz mieć co najmniej hosta Ubuntu/Debian, do którego możesz się podłączyć z Ansible.

Na LinuxHint jest wiele artykułów poświęconych instalacji Ansible. Możesz je sprawdzić, jeśli potrzebujesz zainstalować niezbędne programy w swoim systemie.

Będziesz także potrzebował zainstalować sshpass na swoim komputerze, na którym powinieneś mieć zainstalowane Ansible. W tym artykule pokażę Ci jak zainstalować sshpass na Ubuntu/Debian i CentOS/RHEL. Nie przejmuj się, jeśli nie masz tych programów już zainstalowanych w swoim systemie.

Instalacja sshpass na Ubuntu/Debian

Program sshpass jest dostępny w oficjalnym repozytorium pakietów Ubuntu/Debian. Możesz łatwo zainstalować ten program na swoim komputerze.

Po pierwsze, zaktualizuj cache repozytorium pakietów APT za pomocą następującego polecenia:

$ sudo apt update

Teraz zainstaluj sshpass za pomocą następującego polecenia:

$ sudo apt install sshpass -y

sshpass powinien być teraz zainstalowany.

Instalacja sshpass na CentOS 8/RHEL 8

sshpass jest dostępny w repozytorium EPEL w CentOS 8/RHEL 8. Musisz mieć włączone repozytorium EPEL aby zainstalować sshpass.

Po pierwsze, zaktualizuj pamięć podręczną repozytorium pakietów DNF za pomocą następującego polecenia:

$ sudo dnf makecache

Następnie, zainstaluj pakiet repozytorium EPEL za pomocą następującego polecenia:

$ sudo dnf install epel-release -y

Pakiet repozytorium EPEL powinien być teraz zainstalowany, a repozytorium EPEL powinno być włączone.

Zaktualizuj ponownie pamięć podręczną repozytorium pakietów DNF, w następujący sposób:

$ sudo dnf makecache

Zainstaluj sshpass za pomocą następującego polecenia:

$ sudo dnf install sshpass -y

sshpass powinien być zainstalowany.

Setting Up an Ansible Project Directory

Zanim przejdziemy dalej, dobrze byłoby stworzyć strukturę katalogów projektu, aby wszystko było nieco uporządkowane.

Aby utworzyć katalog projektu sshpass/ i wszystkie wymagane podkatalogi (w bieżącym katalogu roboczym), wykonaj następujące polecenie:

$ mkdir -pv sshpass/{files,playbooks}

Przejdź do katalogu projektu, w następujący sposób:

$ cd sshpass/

Utwórz plik hosts inventory, w następujący sposób:

$ nano hosts

Dodaj IP swojego hosta lub nazwę DNS w pliku inwentaryzacji.

Po zakończeniu tego kroku zapisz plik, naciskając <Ctrl> + X, a następnie Y i <Enter>.

Utwórz plik konfiguracyjny Ansible w katalogu projektu w następujący sposób:

$ nano ansible.cfg

Następnie wpisz następujące linie w pliku ansible.cfg.

Po zakończeniu tego kroku zapisz plik, naciskając klawisze <Ctrl> + X, a następnie Y i <Enter>.

Testowanie logowania SSH opartego na haśle w Ansible

Następnie spróbuj wykonać polecenie ping do hostów z pliku inventory, w następujący sposób:

$ ansible all -u shovon -m ping

UWAGA: Opcja -u służy tutaj do poinformowania ansible, jako który użytkownik ma się zalogować. W tym przypadku będzie to użytkownik shovon. Zastąp tę nazwę użytkownika swoją, od teraz, przez cały czas trwania dema.

Jak widać, nie jestem w stanie zalogować się do hosta i uruchomić żadnych poleceń.

Aby zmusić Ansible do zapytania o hasło użytkownika, uruchom polecenie ansible z argumentem -ask-pass, w następujący sposób:

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

Jak widać, Ansible pyta o hasło SSH użytkownika. Teraz wpisz swoje hasło SSH (hasło logowania użytkownika) i naciśnij <Enter>.

Host może być pingowany, jak poniżej:

Ansible Password-based SSH Login for Playbooks

Podczas uruchamiania playbooków Ansible można używać logowania SSH opartego na haśle. Przyjrzyjmy się przykładowi.

Po pierwsze, utwórz nowy playbook askpass1.yaml w katalogu playbooks/, w następujący sposób:

$ nano playbooks/askpass1.yaml

Wpisz następujące linie w pliku askpass1.yaml playbook file:

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

Po zakończeniu tego kroku zapisz plik, naciskając <Ctrl> + X, a następnie Y i <Enter>.

Uruchom playbook askpass1.yaml, w następujący sposób:

$ ansible-playbook playbooks/askpass1.yaml

Jak widać, nie jestem w stanie połączyć się z hostem. Widać, że dzieje się tak, ponieważ nie uruchomiłem polecenia ansible-playbook z opcją -ask-pass.

Uruchom playbook askpass1.yaml z opcją -ask-pass, w następujący sposób:

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

Jak widać, Ansible prosi o podanie hasła SSH. Wpisz swoje hasło SSH i naciśnij <Enter>.

Playbook askpass1.yaml powinien teraz zostać pomyślnie uruchomiony.

Ansible sudo Password Login for Playbooks

Opcja -ask-pass zapyta tylko o hasło logowania SSH. Co jeśli chcesz również wpisać hasło sudo? Zobaczysz jak to zrobić w następnych krokach.

Po pierwsze, utwórz nowy playbook askpass2.yaml w katalogu playbooks/, w następujący sposób:

$ nano playbooks/askpass2.yaml

Wpisz następujące linie do pliku askpass2.yaml.

– hosts: all
user: shovon
become: True
tasks:
– name: Install apache2 Package
apt:
name: apache2
state: latest
– name: Make sure apache2 service is running
service:
name: apache2
state: started
enabled: True
– name: Copy index.html file to server
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
owner: www-data
group: www-data

Tutaj użyłem polecenia become: True, aby powiedzieć Ansible, aby uruchomiło ten playbook z uprawnieniami sudo. Po zakończeniu tego kroku zapisz plik askpass2.yaml, naciskając <Ctrl> + X, a następnie Y i <Enter>.

Utwórz plik index.html w katalogu files/, w następujący sposób:

$ nano files/index.html

Wpisać następujące kody HTML w pliku index.html:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>It works</p>
</body>
</html>

Po zakończeniu tego kroku, zapisz plik, naciskając klawisze <Ctrl> + X, a następnie Y i <Enter>.

Możesz uruchomić playbook askpass2.yaml z opcją -ask-pass, w następujący sposób:

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

Wtedy zostaniesz poproszony o podanie hasła SSH, tak jak poprzednio.

Ale playbook nadal może się nie uruchomić, nawet jeśli podasz hasło SSH. Powodem jest to, że trzeba powiedzieć Ansible, aby pytał o hasło sudo, a także hasło SSH.

Możesz powiedzieć Ansible, aby pytał o hasło sudo, używając opcji -ask-become-pass podczas uruchamiania playbooka, w następujący sposób:

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

Teraz Ansible poprosi o podanie hasła SSH.

Następnie Ansible poprosi o podanie hasła sudo. Jeśli hasło sudo jest takie samo jak hasło SSH (co jest najbardziej prawdopodobne), pozostaw je puste i naciśnij <Enter>.

Jak widać, playbook został pomyślnie uruchomiony.

Konfigurowanie automatycznego logowania SSH opartego na haśle i logowania hasłem sudo

Możesz chcieć używać logowania SSH i sudo opartego na haśle, ale nie chcesz wpisywać hasła SSH i hasła sudo za każdym razem, gdy uruchamiasz playbook. Jeśli tak jest, to ta sekcja jest dla Ciebie.

Aby używać logowania SSH opartego na hasłach i logowania sudo bez pytania o hasła, wystarczy dodać zmienne hosta ansible_ssh_pass i ansible_become_pass lub zmienne grupy w pliku zasobów.

Najpierw otwórz plik hosts, w następujący sposób:

$ nano hosts

Jeśli masz wiele hostów w pliku inventory i każdy z nich ma inne hasła, to dodaj zmienne ansible_ssh_pass i ansible_become_pass jako zmienne hosta (po każdym hoście) w następujący sposób.

Pamiętaj, aby zastąpić secret swoim hasłem SSH i sudo.

Jeśli wszystkie lub niektóre z hostów mają to samo hasło, wtedy możesz dodać zmienne ansible_ssh_pass i ansible_become_pass jako zmienne grupowe, jak pokazano w poniższym przykładzie.

Tutaj mam tylko jeden host, więc dodałem zmienne ansible_ssh_pass i ansible_become_pass dla grupy all (wszystkie hosty w pliku inventory). Ale możesz dodać te zmienne również dla innych grup.

Po zakończeniu dodawania zmiennych ansible_ssh_pass i ansible_become_pass w pliku hosts, zapisz plik hosts naciskając <Ctrl> + X, a następnie Y i <Enter>.

Możesz teraz uruchomić askpass2.yaml, w następujący sposób:

$ ansible-playbook playbooks/askpass2.yaml

Jak widać, playbook uruchomił się pomyślnie, chociaż nie zapytał o hasło SSH ani hasło sudo.

Więc, w ten sposób używasz sshpass do logowania SSH opartego na haśle i sudo w Ansible. Dziękujemy za przeczytanie tego artykułu!