Administracja serwerami linux za pomocą narzędzia Ansible
Posiadając wiele serwerów z różnymi sposobami logowania, administracja serwerami staje się nieco trudniejsza i żmudniejsza. W poniższym artykule, przedstawię wam jak można jednorazowo skonfigurować plik /etc/ansible/hosts, aby móc jednocześnie zarządzać wieloma serwerami z różnymi sposobami logowania.
Mówiąc tu o różnych sposobach, mam na myśli używanie połączenie tylko po ssh ale:
- z różnymi kluczami prywatnymi
- z różnym portem na którym nasłuchuje usługa SSH
- z różnymi użytkownikami do logowania
- z logowaniem bezpośrednio na użytkownika root lub przejściem na niego za pomocą su
- z przejściem na wyższe uprawnienia za pomocą sudo
Oczywiście najprostszym sposobem, byłoby na każdym serwerze ustawić ten sam sposób logowania i to samo hasło. Niestety nie jest to dobre rozwiązanie i mało bezpieczne.
Mówiąc tu o różnych hasłach, trzeba je gdzieś przechowywać. Administracja serwerami wymusza abyśmy wszystkie wrażliwe dane nie przechowywali w jednym miejscu w nieszyfrowanym formacie. Hasło do serwerów możemy podać bezpośrednio w pliku /etc/ansible/hosts ale byłyby one nieszyfrowane.
Z pomocą przychodzi tutaj „Vault”. Dzięki temu narzędziu możemy przechowywać wrażliwe dane w pliku z zaszyfrowanymi danymi. W takim pliku możemy przechowywać zarówno hasła jak i dane konfiguracyjne. Dostęp do pliku jest zabezpieczony hasłem, które podajemy w trakcie uruchamiania polecania.
Konfiguracja pliku /etc/ansible/hosts – administracja serwerami linux staje się prostsza
W poprzednim artykule ansible-automatyzacja-zadan opisywaliśmy podstawy konfiguracji tego pliku. Poniżej przedstawię konfigurację umożliwiającą logowanie na kilka sposobów:
W pliku /etc/ansible/hosts tworzymy nową grupę:
[groupservers] 192.168.0.10 ansible_connection=ssh ansible_port=22 ansible_user=root ansible_ssh_pass="password"
Powyższy przykład przedstawia łączenie do serwera 192.168.0.10 za pomocą użytkownika root i podając jednocześnie hasło w formacie nieszyfrowanym
Teraz wystarczy tylko uruchomić:
ansible groupservers -a "hostname"
Był to najprostszy sposób logowania. Teraz użyjemy logowania na oddzielnego użytkownika po kluczu ssh, z niestandardowym portem oraz przejście z niego na użytkownika root za pomocą użycia metody „su”.
192.168.0.11 ansible_connection=ssh ansible_port=51232 ansible_user=user1 ansible_become=yes ansible_become_method=su ansible_become_user=root ansible_become_pass="password"
Po ustawieniu tej konfiguracji można użyć agenta do przechowywani klucza ssh:
ssh-agent bash
ssh-add ~/.ssh/id_rsa
a następnie:
ansible groupservers -a "hostname"
Bez użycia agenta ssh musi zostaćc dodatkowo użyty parametr „–private-key=”
ansible groupservers -a "hostname" --private-key=~/.ssh/id_rsa
Zastosowanie szyfrowanych danych za pomocą ansible-vault – administracja serwerami linux z większym bezpieczeństwem przechowywania danych
Jak wcześniej wspominałem przechowywanie haseł w postaci nieszyfrowanej jest niezalecane i nie należy tego stosować.
Ansible posiada ciekawe narzędzie ansible-vault pozwalające szyfrować piki. W przypadku chęci utworzenia takiego pliku wykonujemy polecenie:
ansible-vault create pass_file.yml
Następnie dwukrotnie podajemy hasło, które ma być zabezpieczeniem pliku.
Struktura pliku wygląda następująco:
zmienna: wartość
Także jeśli chcemy przechowywać w tym pliku hasła, to będzie to wyglądało jak poniżej:
root_password: password1 server_root_password: password2
Teraz te zmienne możemy zastosować w pliku /etc/ansible/hosts:
[groupservers] 192.168.0.10 ansible_connection=ssh ansible_port=22 ansible_user=root ansible_ssh_pass="{{ root_password }}" 192.168.0.11 ansible_connection=ssh ansible_port=51232 ansible_user=user1 ansible_become=yes ansible_become_method=su ansible_become_user=root ansible_become_pass="{{ server_root_password }}"
Za pomocą polecenia:
ansible-vault edit pass_file.yml
możemy edytować plik z hasłami i wprowadzać ich dowolną ilość.
Szyfrowany plik wygląda podobnie do tej wartości:
$ANSIBLE_VAULT;1.1;AES256 31356461373165663564633737633864386463666265623937623237373435313637393462643836 3037386632666434646264613532313765383061336663660a393730323231383832643461313634 32366438313566633561636138336364366261623162303436313332613562316134396637643761 3732656333636263360a646162343930383034663632393336376133356132313935353331313438 36353965396337643330613962393265653330316632643962373262336131386238363938313733 37303161356562323739333433393062616232346534393839656638623334646338303936613334 62343530316639393431396536343465366361636339343432333738376261623364353566393830 39336133303033373964663434396535376134633233353638616335376136373931323830653863 64346661363230646130373963623232363831343737333137653838656338613939
Domyślnym edytorem ansible-vault jest vi, możemy to zmienić i używać przykładowo edytora nano.
W konsoli wystarczy wpisać polecenie:
export EDITOR=nano
Uruchomienie zadania z Vault
ansible groupservers -a "hostname" --extra-vars=@pass_file.yml --ask-vault-pass
Posumowanie – administracja serwerami
Jak zauważyliście, posiadając wiele serwerów z różnymi sposobami konfiguracji niestety musimy poświęcić wiele czasu na dostosowanie konfiguracji i możliwości administracji serwerami linux. Natomiast patrząc z większej perspektywy warto poświęcić ten czas.
Jednak przed dostosowaniem plików konfiguracyjnych należy zastanowić się czy nie będzie lepiej ujednolicić sposobu logowania na wszystkich serwerach, dzieląc je na grupy.