Próbuję napisać podręcznik Ansible, aby uruchomić moje serwery. Domyślnie na Linode mogę zalogować się tylko jako root za pomocą hasła, więc mój playbook loguje się jako root, tworzy użytkownika innego niż root za pomocą klucza SSH oraz wyłącza root i hasło SSH.
Jest to problem, ponieważ nie mogę teraz uruchomić ponownie tego poradnika, ponieważ logowanie do konta root jest wyłączone! Chciałbym, aby podręcznik był idempotentny i nie musiał dodawać ani usuwać hostów po ich załadowaniu.
Odpowiedzi:
Lubię to robić w ten sposób:
Próbuję połączyć się ze zdalnym hostem z moim użytkownikiem ansible. Jeśli jest to niemożliwe (przy pierwszym uruchomieniu), łączę się jako root i tworzę ansible user wraz z jego
authorized_keys
plikiem isudo
prawami.Przy kolejnych uruchomieniach łączenie się jako użytkownik ansible działa, dzięki czemu blok zadań można pominąć.
Po uruchomieniu hosta zdalnego mogę kontynuować pracę z użytkownikiem ansible i
become
:źródło
remote_user
w swoim poradniku po pierwszym uruchomieniu? To nie jest idempotentne. Mam nadzieję, że coś przeoczyłem.bootstrap.yml
isite.yml
, jeślisite.yml
obejmuje tobootstrap.yml
cokolwiek innego). Jeśli pierwsze zadaniebootstrap.yml
nie powiedzie się, wszystkie inne zadania tej gry zostaną pominięte i zostaną przejętesite.yml
."skip_reason": "Conditional result was False"
. Uruchomienie gry z-vvv
pokazuje, że połączenie ssh powraca"msg": "non-zero return code", "rc": 255,
when
warunku:when: not "OK" in check_ansible_user.stdout
Zrobiłbym następujące:
sshd_config
(chciałbym polecić zarządzanie całym plikiem przy użyciutemplate
, ale to zależy od ciebie) i wyłączenie logowania rootW przypadku pierwszej roli (podstawowej) zwykle używam czegoś takiego:
W przypadku konfiguracji SSH użyłbym:
Zależności ról Ansible są tutaj udokumentowane .
Aby to zrobić, możesz także użyć zamawiania w swoim podręczniku.
Mam grzeczne rzeczy na githubie (z którego wzięto powyższe), jeśli chcesz zobaczyć to w kontekście
źródło
Jeśli tworzysz swoje serwery na Linode z modułem Linode można zarejestrowania
return value
tegolinode
zadania i obejmują zadania bootstrap ze stanem sprawdzenie outout zadania Linode. To powinno być idempotentne. Wypróbuj coś takiego:bootstrap.yml
zawierałby wtedy wszystkie zadania niezbędne do wyłączenia logowania root ssh i tak dalej.źródło
Być może można po prostu zmodyfikować
ansible_ssh_user
w ekwipunku po tym jak bootstrapped hosta?źródło