0

[Windows Server] Authentification à distance avec OpenSSH

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

Supras

Supras

S’abonner
Notifier de
guest
0 Commentaires
Inline Feedbacks
View all comments