Ansible Openssh pour Windows

SRV-ANSIBLE, installation du packages et configuration ssh.

A ce stade, je suppose que votre serveur Linux Debian a été installé et est pleinement opérationnel. Nous allons donc ouvrir un session distance via le mode SSH de Putty. Pour ma part, lors de l’installation, j’ai configurer un compte non root avec un pseudo (slicy).

>> Installation et Configuration de Ansible :

Installation du packages :

apt -y install ansible-core

Vérification de la version : 

ansible --version
Vous devriez obtenir en retour la version 2.9 :

ansible --versionansible [core 2.19.4]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/slicy/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /home/slicy/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.13.5 (main, Jun 25 2025, 18:55:22) GCC 14.2.0
jinja version = 3.1.6
pyyaml version = 6.0.2 (with libyaml v0.2.5)
On ajoute le répertoire manquant dans /etc :

mkdir /etc/ansible

On crée le fichier Hosts contenant la configuration de bases :

sudo nano /etc/ansible/hosts

On ajoute la configuration de base :

[Windows]
SRV-TEST.ad.fjmlab.com

[all:vars]
ansible_connection = ssh
ansible_shell_type = powershell
ansible_user = ansible$

C’est fait au plus simple. Le compte de connexion étant un comte de service, il est normal qu’il finisse par un $. Cependant vous devriez lire documentation officielle qui explique plus en détails les configurations.

>> Configuration de la connexion sécurisée SSH

On commence par la création des Paires de clé privé et clé public pour l’authentification sécurisée.
Plus d’information dans la documentation de Microsoft : Authentification basée sur des clés dans OpenSSH pour Windows.

On génère les clés en 4096 Bits, l'algorithme par défaut est ed25519. Pendant le processus, il vous sera demander un mot de passe pour la double authentification. Pour ma part j'ai laissé vide mais je vous conseil fortement de mettre une phrase pass en production. 

ssh-keygen -b 4096

Sur l'écran, vous devriez voir quelque chose ressemblant à cela :

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~.ssh/id_ed25519
Your public key has been saved in ~.ssh/id_ed2551.pub
The key fingerprint is:
SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@LOCAL-HOSTNAME

The key's randomart image is:
+--[id25519]--+
|        .        |
|         o       |
|    . + + .      |
|   o B * = .     |
|   o= B S .      |
|   .=B O o       |
|  + =+% o        |
| *oo.O.E         |
|+.o+=o. .        |
+----[SHA256]-----+

Les 2 clés sont ajoutées dans le répertoire caché .ssh

ls .ssh

id_ed25519  id_ed25519.pub  known_hosts  known_hosts.old

- La clé privé est sans extension, vous devez la conserver dans un endroit sûr.
- La clé publique *.pub est celle que vous aller exporté sur vos serveur cible (SRV-TEST)

Enfin, on rajoute la clé privée à l'agent ssh avec les 2 commandes suivantes :

ssh-agent bash

ssh-add ~/.ssh/id_ed25519

>> Export de la clé publique sur le serveur Windows SRV-TEST

Toujours depuis votre session PuTTY, lancer la commande suivante pour afficher le contenu de la clé publique :

cat .ssh/id_ed25519.pub

Copié avec la sourie par sélection et clique droit :

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKczi+TlofWkMJD7HLVBNedSmSpVct2RgmVBw+bD4Os7 slicy@ansible
  • Pour pouvoir apporter des modifications et des ajouts sur le serveur cible, vous aller devoir ouvrir une session avec le compte d’administration.
  • Dans l’explorateur de fichier, il faudra coché la case « éléments masqués ».
  • Aller dans le répertoire « C:\ProgramData\ssh » pour y ajouter les fichiers suivant avec le contenu de de votre copie précédente « administrators_authorized_keys » et « authorized_keys »
  • Puis ouvrir le ficher « sshd_config » et y ajouter les éléments suivants :
PubkeyAuthentication yes
PasswordAuthentication no
StrictModes no
Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
  • Pour finir relancer le service sshd.

Félicitation ! En Bonus pour être arrivé à ce point de la lecture de l’article, je vous donne un exemple de script PowerShell de déploiement rapide d’OpenSSH-Server avec ses fichiers de configuration.

# Variables de Configuration --------------------------------------------------

$UseWUServer = Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer"
$PackageName = Get-WindowsPackage -Online | where { $_.PackageName -like "*OpenSSH-Serveur*"}
$ConfigFileSource = "\\srv-file01\d$\Logiciels\OpenSSH-Server\ConfigFiles\*"
$ConfigFileDestination = "C:\ProgramData\ssh"
$ConfigFireWall= New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
$ConfigOpenSSHPowershell = New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

# Main -----------------------------------------------------------------------

if (!($PackageName)) {
	
	#Désactivation de WSUS
	If ($UseWUServer -eq "1") {
    	Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" -Value 0
    	Get-service wuauserv | Restart-Service
	}

	# Installation de la fonctionnalité 
	Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
	
	# Configuration du Service
	Copy-item -Path $ConfigFileSource -Destination $ConfigFileDestination -Recurse
	$ConfigFireWall
	$ConfigOpenSSHPowershell
	Set-Service -Name sshd -StartupType 'Automatic'
	Restart-Service sshd
	
	# Réactivation de WSUS
	If ($UseWUServer -eq "1") {
    	Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "UseWUServer" -Value 1
    	Get-service wuauserv | Restart-Service
	}
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *