Osoby tworzące playbooki Ansible, często zapominają o tym, że to nie jest tak, że Ansible robi wszystkie operacje samodzielnie. Tak na prawdę Ansible to tylko silnik, który jest zależny od innych narzędzi zapewniających specyficzne funkcjonalności. Takie jak na przykład połączenia SSH ze zdalnymi urządzeniami. Czasem, te narzędzia trzeba dodatkowo skonfigurować, tak by móc je elastycznie wykorzystywać do naszych potrzeb, lub by zapewnić odpowiedni poziom bezpieczeństwa. W tym wpisie będzie krótko o symbiozie Ansible i Paramiko z kluczami SSH w tle.

Symbioza Ansible i Paramiko

Ansible to narzędzie do automatyzacji konfiguracji i zarządzania systemami. Umożliwia zdalne zarządzanie wieloma maszynami za pomocą jednego polecenia. Paramiko to biblioteka Pythona, która pozwala na tworzenie połączeń SSH i SFTP. Umożliwia interakcję z zdalnymi systemami przez SSH. Ansible używa Paramiko do zarządzania zdalnymi serwerami. Paramiko obsługuje komunikację SSH, a Ansible wykorzystuje ją do wykonywania zadań na wielu serwerach.

W kolekcji cisco.ios, która służy do zarządzania konfiguracją urządzeń, biblioteka Paramiko odgrywa kluczową rolę. Kolekcja cisco.ios używa Paramiko do bezpiecznego łączenia się z urządzeniami przez SSH, co pozwala na zarządzanie konfiguracją zdalnie. W przypadku wykonywania zadań takich jak wgrywanie konfiguracji czy zbieranie informacji o stanie urządzenia, cisco.ios polega na Paramiko, aby zapewnić stabilne połączenie i przesyłanie danych. Paramiko obsługuje uwierzytelnianie przy użyciu kluczy SSH, co podnosi poziom bezpieczeństwa. Gdy Ansible uruchamia moduły z kolekcji cisco.ios, Paramiko realizuje operacje związane z przesyłaniem komend i odbieraniem wyników. Pozwala to na automatyzację zarządzania konfiguracją i monitorowanie urządzeń Cisco w sposób efektywny i bezpieczny.

Dostępne metody logowania

Biblioteka Paramiko obsługuje kilka metod uwierzytelniania, które umożliwiają bezpieczne łączenie się z zdalnymi serwerami przez SSH. Dostępne metody to:

  • Uwierzytelnianie za pomocą hasła: Użytkownik podaje nazwę użytkownika i hasło. Paramiko przesyła dane do serwera SSH, który weryfikuje uwierzytelnienie.

  • Uwierzytelnianie za pomocą kluczy SSH: Użytkownik generuje parę kluczy (publiczny i prywatny). Klucz publiczny jest umieszczany na serwerze, a klucz prywatny używany do logowania. Paramiko używa klucza prywatnego do nawiązywania połączenia.

  • Uwierzytelnianie z użyciem agentów kluczy: Paramiko może korzystać z agentów kluczy, takich jak ssh-agent, które przechowują klucze prywatne i automatycznie dostarczają je podczas uwierzytelniania.

  • Uwierzytelnianie za pomocą certyfikatów: Paramiko wspiera także uwierzytelnianie z użyciem certyfikatów, które mogą być używane do zapewnienia dodatkowej warstwy bezpieczeństwa.

Problem z logowaniem do urządzeń

Gdy korzytamy z Ansible i połączeń realizowanych za pomocą biblioteki Paramiko możemy napotkać problem. Wystarczy, że w katalogu ~/.ssh znajduje się plik id_rsa. Jest to plik zawierający klucz prywatny używanym w systemie SSH do uwierzytelniania. Podczas łączenia się z serwerem, klient SSH używa klucza prywatnego do udowodnienia swojej tożsamości. Serwer weryfikuje, czy klucz publiczny odpowiada kluczowi prywatnemu.

Jeżeli plik id_rsa istnieje, to Paramiko używane przez moduły Ansible domyślnie będzie chciało użyć metody uwierzytelniania za pomocą kluczy SSH. Nawet jeżeli urządzenie sieciowe nie ma takiej metody skonfigurowanej, ani włączonej. Nie pomagają opcje ustawione w konfiguracji klienta SSH w systemie (~/.ssh/config) ani opcje przekazywane jako parametry połączenia SSH w playbooku czy konfiguracji hosta w inventory. 

Komunikat błędu w takim przypadku może wyglądać następująco:

fatal: [172.20.1.202]: FAILED! => {"changed": false, "msg": "Failed to authenticate: Authentication failed: transport shut down or saw EOF"}

Rozwiązaniem, jest całkowite wyłączenie uwierzytelniania za pomocą kluczy w pliku ansible.cfg w sekcji parametrów specyficznych dla biblioteki Paramiko:

[paramiko_connection]
look_for_keys = False

Dopiero przy takiej konfiguracji playbook Ansible zaloguje się do urządzenia za pomocą loginu i hasła.

E-BOOK

Zaczynasz swój pierwszy projekt związany z automatyzacją?

Ten e-book jest dla Ciebie! Zawiera sprawdzone podejście, które realizowałem w wielu projektach. Sprawdź co możesz zrobić, by odnieść sukces!


Subscribe
Powiadom o
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)