Moje nowe instancje serwera są skonfigurowane do logowania na root za pośrednictwem ssh z hasłem. Chcę, aby mój podręcznik Ansible ponownie skonfigurował go, aby używał kluczy, i wyłączał logowanie roota hasłem przy pierwszym uruchomieniu, więc potrzebuję czegoś takiego:
- spróbuj zalogować się za pomocą klucza
jeśli nie można się zalogować za pomocą klucza:
- zaloguj się za pomocą hasła
- dodaj klucz do uprawnionych kluczy
- wyłącz logowanie rootem za pomocą hasła
- opcjonalnie podłącz ponownie za pomocą klucza
wykonuj inne zadania
Jak mogę to osiągnąć?
EDYCJA : Żeby było jasne, nie pytam, jak dodać klucz lub wyłączyć root, to tylko dla kontekstu. Pytam, jak wrócić do hasła, jeśli nie można go uwierzytelnić za pomocą klucza. Po ustawieniu --ask-pass
lub ansible_ssh_pass
ustawieniu Ansible nawet nie spróbuje użyć uwierzytelnienia za pomocą klucza publicznego
ssh
authentication
ansible
petr0
źródło
źródło
Odpowiedzi:
Możesz wypróbować tę
PreferredAuthentications
opcję, ustawiając ją napublickey,password
. Domyślnie zawiera je w tej kolejności, wraz z innymi opcjami, więc prawdopodobnie ustawia to ansible. Dodanie go za pośrednictwem-o
lub klientssh_config
może temu zapobiec.Możesz być w stanie użyć skryptu opakowania. Na przykład, gdy to jest
key_or_password.sh
i a,pass.sh
które podaje hasło, uruchomieniebash key_or_password.sh root@host
spróbuje użyć klucza publicznego, a następnie nieinteraktywnego loginu do hasła.Dziennik wskazuje, która metoda zakończyła się powodzeniem, np
źródło
Oto, co robię, jeśli
ansible_user
różni się w przypadku „pierwszego uruchomienia” podręcznika (na przykład, jeśli masz tylkoroot
użytkownika i zamierzasz skonfigurować nowego użytkownika za pomocą klucza SSH):ansible_pass
taki sam sposób, jakbyś używał loginu do hasła (pamiętaj, aby użyć Vault). Powinno to być hasło użytkownika, którego używasz do „pierwszego uruchomienia” poradnika.ansible_user
nazwę użytkownika, którego chcesz używać po pierwszym uruchomieniu, gdy użytkownicy prawidłowo skonfigurowali się na serwerze.ansible_user_first_run
użytkownika, którego będziesz używać podczas pierwszego uruchomienia podręcznikaroot
.ignore_errors
ichanged_when: False
ansible_user
do wartościansible_user_first_run
Oto kod:
Uwaga: Warto skonfigurować,
transport = ssh
ponieważ Paramiko może nieoczekiwanie nie udać się do serwera w niektórych konfiguracjach (np. Gdy serwer jest skonfigurowany tak, aby nie akceptować haseł, a ty próbujesz najpierw z kluczem, a następnie hasłem ... dziwne!) Również transport ssh jest szybszy, więc i tak warto.Dodatkowa uwaga: Jeśli używasz tej metody, musisz określić
gather_facts: false
w pliku definicji Playbook, aby zadania konfiguracji / gromadzenia faktów nie były uruchamiane automatycznie, zanim przejdziesz do etapu testowania haseł. Jeśli potrzebujesz któregoś z wiarygodnych faktów, będziesz musiał wyraźnie zadzwonićsetup
w swojej roli przed uzyskaniem dostępu do danych normalnie dostępnych w takich miejscach, jakansible_devices
itp. Jednym z dobrych sposobów jest zadzwonieniesetup
zwhen
klauzulą, która sprawdza, czy fakt, którego używasz, jest pusty lub nie, zanim nazwiesz go swoją rolą.źródło
gather_facts: no
, aby zatrzymać ansibl próby połączenia przy uruchamianiu playbook :)Możesz używać
--ask-pass
podczas uruchamiania ansible-playbook.W przypadku innych zadanych zadań można to osiągnąć na różne sposoby, np. Przez moduł kopiowania.
Wyłączenie logowania roota można również wykonać np. przez szablon
sshd_conf
lub wstawienie linii w pliku conf.źródło