Nie tylko SSH – alternatywne metody komunikacji w Ansible

Alternatywne metody komunikacji w Ansible

Ansible to niezwykle elastyczne narzędzie do automatyzacji, które komunikuje się z zarządzanymi systemami za pomocą tzw. connection plugins – wtyczek określających sposób połączenia z hostami. Choć domyślnym i najczęściej używanym mechanizmem jest SSH, w rzeczywistości Ansible wspiera szereg alternatywnych metod komunikacji, które mogą być bardziej odpowiednie w zależności od środowiska, systemu operacyjnego czy celu automatyzacji.

W tym artykule przedstawię szczegółowo różne metody komunikacji, ich zastosowania oraz przykłady konfiguracji.

1. SSH – klasyczny model połączenia

SSH (Secure Shell) to domyślny sposób komunikacji w Ansible. Pozwala na bezpieczne łączenie się z hostami zarządzanymi bez potrzeby instalacji żadnego oprogramowania po stronie docelowej.

Zastosowanie:

  • Serwery Linux i Unix (zarówno lokalne, jak i w chmurze).
  • Środowiska, gdzie bezpieczeństwo połączenia ma kluczowe znaczenie.

Przykład użycia:

[webservers]
192.168.1.10 ansible_user=ubuntu ansible_connection=ssh

Zalety:

  • Nie wymaga żadnych agentów po stronie hosta.
  • Bezpieczne szyfrowanie transmisji (klucze SSH, GSSAPI, Kerberos).
  • Łatwa integracja z istniejącymi politykami bezpieczeństwa.

2. Paramiko – alternatywny klient SSH

Paramiko to biblioteka Pythona implementująca protokół SSH, będąca alternatywą dla natywnego klienta systemowego. Była domyślnym backendem w starszych wersjach Ansible, obecnie dostępna jako opcja.

Zastosowanie:

  • Środowiska z ograniczonym dostępem do binariów OpenSSH.
  • Systemy, w których wymagane są niestandardowe biblioteki kryptograficzne.

Przykład w inventory:

[legacy_servers]
server1 ansible_connection=paramiko ansible_user=admin

Uzasadnienie: Paramiko bywa przydatne na starszych systemach lub w środowiskach testowych, gdzie OpenSSH jest niedostępny, ale w nowych wdrożeniach preferowane jest natywne SSH.


3. Local – wykonywanie zadań lokalnie

Local connection pozwala uruchamiać zadania bezpośrednio na maszynie, z której działa Ansible – bez żadnego zdalnego połączenia. Idealne do automatyzacji lokalnych procesów, budowy CI/CD lub zarządzania konfiguracją kontrolera.

Zastosowanie:

  • Automatyzacja procesów CI/CD (np. z GitLab CI, Jenkins).
  • Tworzenie lokalnych środowisk testowych.
  • Konfiguracja maszyn deweloperskich.

Przykład:

- hosts: localhost
  connection: local
  tasks:
    - name: Zainstaluj narzędzie htop lokalnie
      become: yes
      ansible.builtin.apt:
        name: htop
        state: present

Uzasadnienie: Tryb local eliminuje potrzebę sieci, co czyni go idealnym w automatyzacji developerskiej i w pipeline’ach CI/CD.


4. WinRM – komunikacja z systemami Windows

Ansible umożliwia pełną automatyzację systemów Windows przy użyciu protokołu WinRM (Windows Remote Management). Dzięki temu można instalować oprogramowanie, konfigurować usługi czy zarządzać rejestrem.

Zastosowanie:

  • Administracja systemami Windows Server i stacjami roboczymi.
  • Konfiguracja Active Directory, IIS, Hyper-V.

Przykład konfiguracji hosta Windows:

[windows]
winserver01 ansible_host=10.0.0.5 ansible_user=Administrator ansible_password='Haslo123' ansible_connection=winrm ansible_winrm_transport=ntlm

Przykład playbooka:

- name: Instalacja IIS na Windows
  hosts: windows
  tasks:
    - name: Zainstaluj role IIS
      ansible.windows.win_feature:
        name: Web-Server
        state: present

Uzasadnienie: WinRM jest jedyną natywną i w pełni wspieraną metodą zarządzania systemami Windows w Ansible, dającą możliwości analogiczne do SSH w Linuksie.


5. Docker i Podman – komunikacja z kontenerami

W środowiskach kontenerowych Ansible może komunikować się z kontenerami za pomocą połączeń docker lub podman. Pozwala to wykonywać polecenia bezpośrednio wewnątrz kontenera bez połączenia sieciowego.

Zastosowanie:

  • Konfiguracja aplikacji w kontenerach podczas ich budowania.
  • Testowanie ról i playbooków w środowiskach odizolowanych.
  • Integracja z CI/CD przy budowie obrazów kontenerowych.

Przykład użycia:

[containers]
nginx ansible_connection=docker

Playbook:

- hosts: containers
  tasks:
    - name: Sprawdz wersje systemu w kontenerze
      ansible.builtin.command: cat /etc/os-release

Uzasadnienie: Połączenia Docker/Podman są idealne w środowiskach developerskich i testowych, gdzie hosty są kontenerami, a nie fizycznymi serwerami.


6. Chroot – praca w środowisku z ograniczonym dostępem

Tryb chroot pozwala Ansible na wykonywanie zadań wewnątrz środowiska chroot (ang. “change root”), bez fizycznego logowania do systemu. To rozwiązanie często używane przy budowaniu obrazów systemów operacyjnych lub w środowiskach ratunkowych.

Zastosowanie:

  • Budowa obrazów ISO i systemów Live.
  • Automatyzacja konfiguracji systemu zanim zostanie uruchomiony.
  • Bezpieczna administracja z ograniczonym dostępem do systemu.

Przykład:

[bootstrap]
/mnt/chroot ansible_connection=chroot

Uzasadnienie: Chroot jest użyteczny, gdy system nie działa jeszcze w pełni lub chcemy konfigurować środowisko offline (np. obraz systemu Linux przed instalacją).


7. Network Plugins – automatyzacja urządzeń sieciowych

Ansible obsługuje automatyzację konfiguracji urządzeń sieciowych poprzez specjalne wtyczki komunikacyjne: network_cli, netconf i httpapi. Dzięki nim można zarządzać routerami, przełącznikami i firewallami różnych producentów (Cisco, Juniper, Arista, Fortinet).

Zastosowanie:

  • Konfiguracja VLAN-ów, tras, interfejsów i reguł ACL.
  • Zbieranie informacji o stanie urządzeń (facts gathering).
  • Masowe wdrażanie zmian konfiguracyjnych w sieci.

Przykład dla Cisco IOS:

[cisco]
router1 ansible_host=192.168.100.1 ansible_connection=network_cli ansible_network_os=ios ansible_user=admin ansible_password=admin123

Playbook:

- name: Konfiguracja interfejsu na Cisco IOS
  hosts: cisco
  tasks:
    - name: Ustaw opis interfejsu
      cisco.ios.ios_interface:
        name: GigabitEthernet0/1
        description: Polaczenie z siecia LAN

Uzasadnienie: Wtyczki sieciowe umożliwiają integrację Ansible z infrastrukturą sieciową w sposób natywny i bezpieczny, bez potrzeby stosowania zewnętrznych narzędzi CLI.


8. Podsumowanie

Ansible oferuje szeroki wachlarz metod komunikacji z systemami i urządzeniami – od klasycznego SSH, przez kontenery i środowiska chroot, aż po zarządzanie urządzeniami sieciowymi czy systemami Windows. Dzięki wtyczkom connection plugins można dopasować sposób działania do dowolnego kontekstu infrastrukturalnego.

W skrócie:

Metoda Środowisko docelowe Typowe zastosowanie
ssh Linux / Unix Standardowe połączenia produkcyjne
paramiko Starsze systemy bez OpenSSH Środowiska legacy
local Maszyna kontrolera CI/CD, automatyzacja lokalna
winrm Windows Server Administracja i konfiguracja Windows
docker/podman Kontenery Testy, DevOps, budowa obrazów
chroot Systemy offline Budowa obrazów systemowych
network_cli/httpapi/netconf Urządzenia sieciowe Konfiguracja i automatyzacja sieci

Wniosek: Wybór odpowiedniego sposobu komunikacji w Ansible zależy od środowiska i celu automatyzacji. SSH wystarczy w większości przypadków, ale alternatywne pluginy pozwalają objąć automatyzacją niemal każdy komponent infrastruktury IT – od serwerów, przez kontenery, po urządzenia sieciowe i systemy Windows.

Przewijanie do góry