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
- Instalacja sshpass na Ubuntu/Debian
- Instalacja sshpass na CentOS 8/RHEL 8
- Setting Up an Ansible Project Directory
- Testowanie logowania SSH opartego na haśle w Ansible
- Ansible Password-based SSH Login for Playbooks
- Ansible sudo Password Login for Playbooks
- Konfigurowanie automatycznego logowania SSH opartego na haśle i logowania hasłem sudo
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:
Teraz zainstaluj sshpass za pomocą następującego polecenia:
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:
Następnie, zainstaluj pakiet repozytorium EPEL za pomocą następującego polecenia:
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:
Zainstaluj sshpass za pomocą następującego polecenia:
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:
Przejdź do katalogu projektu, w następujący sposób:
Utwórz plik hosts inventory, w następujący sposób:
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:
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:
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:
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:
Wpisz następujące linie w pliku askpass1.yaml playbook file:
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:
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:
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:
Wpisz następujące linie do pliku askpass2.yaml.
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:
Wpisać następujące kody HTML w pliku index.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:
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:
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:
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:
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!