Dwie opcje - pierwsza, jak powiedziałeś we własnej odpowiedzi, to ustawienie zmiennej środowiskowej ANSIBLE_HOST_KEY_CHECKING
na False.
Drugim sposobem ustawienia jest umieszczenie go w pliku ansible.cfg, a to jest naprawdę przydatna opcja, ponieważ możesz ustawić to globalnie (na poziomie systemu lub użytkownika, w /etc/ansible/ansible.cfg
lub ~/.ansible.cfg
) lub w pliku konfiguracyjnym w tym samym katalogu jako podręcznik, z którego korzystasz.
Aby to zrobić, utwórz ansible.cfg
plik w jednej z tych lokalizacji i dołącz to:
[defaults]
host_key_checking = False
Możesz tam również ustawić wiele innych przydatnych ustawień domyślnych, takich jak zbieranie faktów na początku gry, scalanie skrótów zadeklarowanych w wielu miejscach lub zastępowanie ich innymi itd. Jest cała duża lista opcji tutaj w ansibl docs.
Edycja: uwaga na temat bezpieczeństwa.
Sprawdzanie poprawności klucza hosta SSH jest znaczącą warstwą bezpieczeństwa dla stałych hostów - jeśli łączysz się z tym samym komputerem wiele razy, warto lokalnie zaakceptować klucz hosta.
W przypadku instancji EC2 o dłuższej żywotności sensowne byłoby zaakceptowanie klucza hosta w przypadku zadania uruchamianego tylko raz podczas początkowego tworzenia instancji:
- name: Write the new ec2 instance host key to known hosts
connection: local
shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"
Nie ma żadnej wartości zabezpieczeń do sprawdzania kluczy hosta w instancjach, które wstajesz dynamicznie i usuwasz zaraz po wykonaniu elementu playbook, ale sprawdzanie kluczy hostów dla maszyn trwałych ma wartość bezpieczeństwa. Dlatego należy zarządzać sprawdzaniem klucza hosta inaczej w zależności od środowiska logicznego.
- Pozostaw sprawdzanie domyślnie włączone (in
~/.ansible.cfg
)
- Wyłącz sprawdzanie klucza hosta w katalogu roboczym dla playbooków, które uruchamiasz z efemerycznymi instancjami (
./ansible.cfg
wraz z playbookiem do testów jednostkowych na maszynach wirtualnych vagrant, automatyzację dla krótkotrwałych instancji ec2)
known_hosts
plikach lokalnych , aby SSH i Ansible mogły rozpoznać maszynę. Niezastosowanie się do tego celu, zwłaszcza wyłączenie sprawdzania klucza hosta, obniża bezpieczeństwo SSH do prawie zera i umożliwia ataki MITM. Wiele maszyn znajdujących się w „sieci wewnętrznej” jest w rzeczywistości połączonych z Internetem, gdzie pojedyncza szybsza odpowiedź DNS umożliwia rozmowę z napastnikiem zamiast z celem.ssh-keyscan <ip list>
na zaufanej maszynie (dla mnie jest to host bastionu / skoku) w tej samej sieci i umieściłem wyniki wknown_hosts
Aby skonfigurować zaufanego hosta, AWS ujawnia klucz hosta w dziennikach uruchamiania instancji, więc wytropienie tego klucza było jednym ręcznym krokiem, którego nigdy nie przerywałem, gdybym całkowicie odtworzył moje środowisko. Ale tego hosta zwykle nie trzeba było usuwać. To może pomóc.Znalazłem odpowiedź, musisz ustawić zmienną środowiskową
ANSIBLE_HOST_KEY_CHECKING
naFalse
. Na przykład:źródło
przekaż do nikobelia
Dla tych, którzy używają jenkinsa do uruchomienia playbooka, właśnie dodałem do mojej pracy Jenkinsa przed uruchomieniem ansible-playbook zmienną środowiskową he ANSIBLE_HOST_KEY_CHECKING = False Na przykład to:
źródło
Zmiana
host_key_checking
nafalse
dla wszystkich gospodarzy to bardzo zły pomysł.Jedyny moment, w którym chcesz to zignorować, to „pierwszy kontakt”, który wykonają te dwa zadania:
Dlatego wyłączamy sprawdzanie klucza hosta tylko wtedy, gdy nie mamy klucza hosta w naszym
known_hosts
pliku.źródło
Możesz go przekazać jako argument wiersza poleceń podczas uruchamiania playbooka:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
źródło
Jeśli nie chcesz modyfikować
ansible.cfg
lubplaybook.yml
, możesz po prostu ustawić zmienną środowiskową:źródło
Użyj parametru o nazwie validate_certs, aby zignorować walidację ssh
W ten sposób ignoruje proces walidacji ssh
źródło
validate_certs
Parametr po prostu opowiada boto nie potwierdzić AWS API HTTPS cert. Nie ma to wpływu na weryfikację klucza SSH.Wiem, że odpowiedź na to pytanie również jest poprawna, ale chciałem tylko połączyć dokument ansible, w którym wyjaśniono jasno, kiedy i dlaczego należy dodać odpowiednie sprawdzenie: sprawdzanie klucza hosta
źródło
Najwięcej problemów pojawia się, gdy chcesz dodać nowy host do dynamicznego spisu (poprzez moduł add_host) w playbooku. Nie chcę na stałe wyłączać sprawdzania hosta linii papilarnych, więc rozwiązania takie jak wyłączenie go w globalnym pliku konfiguracyjnym nie są dla mnie w porządku. Eksportowanie var like
ANSIBLE_HOST_KEY_CHECKING
przed uruchomieniem Playbooka, to kolejna rzecz do zrobienia przed uruchomieniem, o której należy pamiętać.Lepiej jest dodać lokalny plik konfiguracyjny w tym samym katalogu, w którym znajduje się playbook. Utwórz plik o nazwie
ansible.cfg
i wklej następujący tekst:Nie musisz pamiętać, aby dodać coś do zmiennych środowiskowych lub dodać do
ansible-playbook
opcji. Łatwo jest umieścić ten plik w repozytorium git ansible.źródło