Administracja serwerami

Ansible – administracja serwerami linux

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.