Az Ansible környezetünkhöz 2 virtuális gépet fogunk használni: az eddigi GNS VM mellett egy Debian VM-et használunk az Ansible scriptek futtatására. A kódot továbbra is a gazdagépen írjuk, VSCode-al, SSH tunnelen keresztül. Ennek megkönnyítése érdekében először RSA kulcspáros hitelesítést kell beállítani.
A gazdagépen navigáljunk el C:\Users\<NÉV>\.ssh\
útvonalhoz, majd nyissunk egy parancssort és generáljunk egy kulcspárt:
ssh-keygen
Ezt követően másoljuk át a publikus kulcsot az Ansible hostra:
scp id_rsa.pub ansible@192.168.86.200:/home/ansible/id_rsa.pub
Most az ansible hoston adjuk hozzá a publikus kulcsot az engedélyezett kulcsokhoz:
cd
cat id_rsa.pub >> .ssh/authorized_keys
A linux oldalon ezzel kész is, már csak a windowson kell szerkeszteni a C:\Users\<NÉV>\.ssh\config
fájlt. Ha nincs ilyen, hozzuk létre; adjuk hozzá a következő részt:
Host ansible@192.168.86.200
HostName 192.168.86.200
User ansible
IdentityFile C:\\Users\\<NÉV>\\.ssh\\id_rsa
Ezt követően a VS Code újbóli megnyitása után a bal alsó sarokban Open a remote window > Connect to Host
menüben megjelenik az ansible host, csatlakozzunk rá.
Az Ansible hoston telepítjük a szükséges csomagokat: (root felhasználóval futtatva)
apt update
apt install python3 python3-pip python3-venv
Az ansible telepítést a következő paranccsal ellenőrizhetjük:
ansible --version
Bizonyos Cisco eszközök nem támogatják az SSH újabb paramétereit, így ezen módosítani kell a /etc/ssh/ssh_config
fájlban:
Host *
KexAlgorithms +diffie-hellman-group14-sha1
HostkeyAlgorithms +ssh-rsa
Indítsuk újra az ssh szolgáltatást:
service ssh restart
Készítünk egy mappát, amiben dolgozni fogunk:
cd
mkdir project1 && cd project1
A Cisco eszközök kezeléséhez szükség lesz egy ansible modulra, ami a Debian csomaglistából nem érhető el, ezért létre kell hozni egy python virtuális környezetet és oda telepíteni azt:
python3 -m venv venv
Ha ezt a VSCode-ban csináltuk, akkor ezt követően fel kellene jönnie egy kérdésnek, hogy váltson-e a program erre a környezetre; fogadjuk el. Ha később nyitjuk meg itt a VSCode-ot, akkor ellenőrizzük, hogy ez a környezet legyen érvényben.
Így már tudunk csomagokat telepíteni, tegyük is ezt meg:
pip install ansible ansible-lint ansible-pylibssh
Tegyük fel, hogy a GNS-ben már van egy router, aminek címe 192.168.86.201, engedélyezve van rajta az SSH és létezik egy ansible
/ansible
felhasználó. (Az IOSv routeren alapértelmezés szerint a vty vonalakon transport input none
van kiadva, ezt mindenképp változtassuk meg!)
A hálózati eszköz nyilvános kulcsát fel kell venni az ismert kulcsok közé, hogy a script futásakor ne kérdezzen rá az ssh program (mert ettől megakadna). A legegyszerűbb, ha először manuálisan csatlakozunk ssh-val a hálózati eszközre és az előbb tárgyalt kérdésnél igent válaszolunk.
Az ansible host címe továbbra is 192.168.86.200, ezt fogjuk megpingelni a routerről, ansible segítségével.
Hozzuk létre a következő két fájlt:
inventory.yml
all:
vars:
ansible_connection: ansible.netcommon.network_cli
ansible_network_os: cisco.ios.ios
ansible_user: ansible
ansible_password: ansible
hosts:
r1:
ansible_host: 192.168.86.201
1-test.yml
---
- name: Test reachability
hosts: r1
tasks:
- name: Ping me
cisco.ios.ios_ping:
dest: "192.168.86.200"
Ezt követően adjuk ki a következő parancsot:
ansible-playbook -i inventory.yml 1-test.yml
Ha minden jól lett beállítva, a program hiba nélkül lefut.