Votre machine doit avoir installé les éléments suivants en fonction de votre OS :
Et avoir installé la librairie python suivante :
pip install "pywinrm>=0.3.0"
Votre machine doit également pouvoir contacter votre ADDS en traffic DNS. (fichier resolv.conf)
Votre serveur Windows doit avoir WinRM de configuré.
Ajoutez le default_realm (dans mon cas toto.lan)
default_realm=toto.lan
Ajoutez le realm dans "[realms]" (attention a bien respecter la casse)
[realms]
TOTO.LAN = {
kdc = nom_complet_machine.toto.lan
admin_server = nom_complet_machine.toto.lan
}
Ajoutez également le "[domain_realm]"
[domain_realm]
.toto.lan = TOTO.LAN
Vérifiez la connexion avec kinit puis avec klist
kinit -C user@toto.lan
klist
Ticket cache: KEYRING:persistent:1000:1000
Default principal: user@TOTO.LAN
Valid starting Expires Service principal
04/19/2024 13:57:34 04/19/2024 23:57:34 krbtgt/TOTO.LAN@TOTO.LAN
renew until 04/20/2024 13:57:28
Passez à la suite.
Dans le fichier hosts, il faut préciser le type de connexion et de transport qui sera utilisé, ainsi que le port de connexion.
ATTENTION, précisez bien pour la machine windows le NOM de la machine, si ce n'est pas le cas kerberos vous renverra une erreur.
Fichier hosts.yml
targets:
hosts:
SUSE:
ansible_host: 192.168.10.210
ansible_user: "{{ vault_linux_ansible_user }}"
ansible_password: "{{ vault_linux_ansible_password }}"
W2022:
ansible_host: v-s22w-cible.tp-ansible.lan
ansible_user: "{{ vault_windows_ansible_user }}"
ansible_password: "{{ vault_windows_ansible_password }}"
ansible_connection: winrm
ansible_port: 5985
ansible_winrm_transport: kerberos
Fichier Playbook (test_copy.yml)
---
- name: "Test playbook"
hosts: targets
vars_files:
- files/secrets/credentials.yml
tasks:
#Lance une copie de fichier distant uniquement s'il s'agit d'un Suse
- name: "Test Copy"
ansible.builtin.copy:
src: "/tmp/toto.txt"
dest: "/tmp/toto2.txt"
remote_src: yes
owner: toto
group: users
mode: '0777'
when: ansible_os_family == "Suse"
#Exécute le code windows seulement si c'est un os windows
- name: "Run basic PowerShell script"
ansible.windows.win_powershell:
script: |
echo "Hello World"
when: ansible_os_family == "Windows"
#Exécute le code windows seulement si c'est un os windows
- name: "Stop SSH"
ansible.windows.win_service:
name: sshd
state: stopped
when: ansible_os_family == "Windows"