OpenSSH est un ensemble d’outils informatiques libres permettant des communications sécurisées sur un réseau informatique en utilisant le protocole SSH.
Authentification avec un couple d’identifiants
Téléchargement
Je décide d’utiliser la version 10 (v0.0.10.0) d’OpenSSH pour Windows. En effet, lors de la configuration de mon infrastructure il y a quelques mois (Juin 2017), j’ai rencontré pas mal de soucis avec la version 11 (v0.0.11.0.
Téléchargement de la v0.0.10.0
Dans mon cas, je part sur une architecture 64bits (OpenSSH-Win64.zip).
Une fois les fichiers téléchargés : on dézippe, on extrait et on renomme dans le chemin C:\Program Files de manière à se retrouver avec un dossier OpenSSH à l’intérieur, contenant donc tout les fichiers nécessaires à l’installation. C:\Program Files\OpenSSH
Configuration
On exécute Powershell avec les droits administrateur. Et on se rend dans le répertoire de travail
cd 'C:\Program Files\OpenSSH'
Installation du daemon SSH et de son agent
powershell -executionpolicy bypass -file install-sshd.ps1
On génère les clés de notre hôte
.\ssh-keygen.exe -A
On rédige une sécurité pour autoriser l’utilisation du port 22 (ou autres, au choix) sur le firewall.
New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
On choisis de démarrer automatiquement OpenSSH à chaque démarrage de l’ordinateur
Set-Service sshd -StartupType Automatic Set-Service ssh-agent -StartupType Automatic
Démarrage
Démarrage du daemon SSH
Start-Service sshd
A ce stade-là, sans toucher au fichier de configuration, le serveur SSH est actif et opérationnel. On peut se connecter dessus.
Le fichier de configuration (sshd_config) se situe dans C:\Program Files\OpenSSH.
On peut en avoir besoin pour affiner la configuration du daemon SSH notamment sa sécurité (PermitRootLogin par exemple). À chaque changement de configuration de ce fichier, il faut redémarrer le service !
Stop-Service sshd Start-Service sshd
Affiner sa configuration – manpage sshd_config
Authentification par clé publique
Explication
« L’authentification par clé publique est une autre façon de vous identifier auprès d’une machine distante, qui ne demande pas de taper un mot de passe. C’est une méthode sûre, plus souple que l’authentification par mot de passe, mais aussi plus difficile à mettre en place. » (Marc Terrier – lien original)
Dans mon cas, cela va me permettre une gestion des tâches centralisés de mes nodes Windows Server avec Rundeck, qui est un ordonnanceur centralisé open source. De plus, comme cité juste au-dessus, l’authentification par clé publique est plus sûr que l’identifiant login/password.
Mon serveur Debian enverras directement des requêtes à mon node Windows Server. Des requêtes passant par un tunnel chiffré SSH, ne nécessitant pas de mot de passe grâce à l’authentification par clé publique. L’objectif ici est donc de réaliser une connexion SSH sans identifiants d’un serveur distant GNU/linux vers mon Windows Server.
Marche à suivre
Rappel : à ce stade, on possède une simple connexion SSH avec login/mot de passe.
On réalise tout d’abord une connexion WinSCP, qui va nous permettre de créer un dossier .ssh dans notre répertoire utilisateur (C:/Users/Mon_utilisateur/.ssh) et avec les bons droits d’accès.
On crée un fichier authorized_keys à l’intérieur qui contiendras la clé public du serveur GNU/Linux (id_rsa.pub). Il faut ajouter chaque clé public pour les machines autorisées à se connecter. C’est ce fichier qui nous permet de toutes les recensés !
Au choix :
1°) Le mieux est de transférer ce fichier et de le renommer directement en authorized_keys
2°) Où alors on copie son contenue directement dedans.
Peu importe au final tant que la clé publique de notre hôte distant est présente…
On ajuste les permissions sur notre fichier authorized_keys
$authorizedKeyPath = "C:\Users\Mon_Utilisateur\.ssh\authorized_keys" $acl = get-acl $authorizedKeyPath $ar = New-Object System.Security.AccessControl.FileSystemAccessRule("NT Service\sshd", "Read", "Allow") $acl.SetAccessRule($ar) Set-Acl $authorizedKeyPath $acl
La ligne 1 est à adapter selon notre chemin de répertoire.
On lance ensuite le paquetage d’installation pour l’authentification par clé
powershell -executionpolicy bypass -file install-sshlsa.ps1
On modifie ensuite notre fichier de configuration du daemon SSH sshd_config pour l’adapter à la politique de sécurité de l’authentification par clé. (C:\Program Files\OpenSSH\sshd_config)
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no PubkeyAcceptedKeyTypes ssh-ed25519*,ssh-rsa*,ssh-dss*,ecdsa-sha2*
On redémarre notre machine, toujours en Powershell (tant qu’à faire)
Restart-Computer
La configuration est terminée ! 🙂
De mon serveur GNU/linux, je peux maintenant me connecter sans mot de passe à mon serveur Windows.
Sources et aides complémentaires
https://github.com/PowerShell/Win32-OpenSSH/wiki/ssh.exe-examples
https://github.com/PowerShell/Win32-OpenSSH/releases
https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH