Openssh - windows
OpenSSH est une implémentation libre du protocole Secure Shell (SSH) utilisée pour la gestion de systèmes distants. Le projet est géré par des développeurs tiers dans le cadre de la distribution OpenBSD (la fourche Microsoft se trouve dans GitHub). OpenSSH a été ajouté à Windows à l’automne 2018 et est disponible pour Windows 10 et Windows Server 2019.
SSH est basé sur une architecture client-serveur où le système sur lequel travaille l’utilisateur est le client et le système distant géré est le serveur. OpenSSH comporte différents composants qui offrent une approche sécurisée (chiffrement et authentification) et directe de l’administration de système à distance, notamment :
- <syntaxhighlight lang="powershell" inline>sshd.exe</syntaxhighlight> : composant de serveur SSH qui doit être exécuté sur le système géré à distance (serveur)
- <syntaxhighlight lang="powershell" inline>ssh.exe</syntaxhighlight> : composant de client SSH qui est exécuté sur le système local de l’utilisateur (client)
- <syntaxhighlight lang="powershell" inline>ssh-keygen.exe</syntaxhighlight> : génère, gère et convertit les clés d’authentification pour SSH
- <syntaxhighlight lang="powershell" inline>ssh-agent.exe</syntaxhighlight> : stocke les clés privées utilisées pour l’authentification des clés publiques
- <syntaxhighlight lang="powershell" inline>ssh-add.exe</syntaxhighlight> : ajoute des clés privées à la liste autorisée par le serveur
- <syntaxhighlight lang="powershell" inline>ssh-keyscan.exe</syntaxhighlight> : aide à collecter les clés d’hôte SSH publiques à partir de différents ordinateurs hôtes
- <syntaxhighlight lang="powershell" inline>sftp.exe</syntaxhighlight> : service qui fournit le protocole Secure File Transfer et est exécuté sur SSH
- <syntaxhighlight lang="powershell" inline>scp.exe</syntaxhighlight> : utilitaire de copie de fichiers exécuté sur SSH
Une documentation détaillée supplémentaire relative aux fonctionnalités courantes d'OpenSSH est disponible en ligne sur OpenSSH.com. Le document suivant traite de son utilisation sur Windows et est utilisable de la même manière que sur son implémentation GNU/Linux.
Installation
Il est possible d'installer l'outil via l'interface graphique mais je préfère personnellement me passer du clicodrome habituel et utiliser une console Powershell en administrateur.
Vérification de la disponibilité de l'outil sur votre plateforme
<syntaxhighlight lang="powershell"> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' </syntaxhighlight>
Le retour de la commande doit ressembler à ceci
<syntaxhighlight lang="powershell"> Name : OpenSSH.Client~~~~0.0.1.0 State : NotPresent
Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent </syntaxhighlight>
Installation de la partie cliente
<syntaxhighlight lang="powershell"> Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 </syntaxhighlight>
Installation de la partie serveur
<syntaxhighlight lang="powershell"> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 </syntaxhighlight>
Démarrage manuel du service
<syntaxhighlight lang="powershell"> Start-Service sshd </syntaxhighlight>
Démarrage automatique avec le système
<syntaxhighlight lang="powershell"> Set-Service -Name sshd -StartupType 'Automatic' </syntaxhighlight>
Une règle de pare-feu autorisant les connexions entrantes est censée être créée automatiquement. Microsoft propose une structure conditionnelle permettant de vérifier son effectivité et, si non, la créer le cas échéant
<syntaxhighlight lang="powershell">
- Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..." New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
} </syntaxhighlight>
La commande <syntaxhighlight lang="powershell" inline>netstat -a -o -n -b</syntaxhighlight> permet de confirmer l'ouverture d'un socket TCP sur le port <syntaxhighlight lang="powershell" inline>22</syntaxhighlight> et donc la bonne écoute du service sur le réseau. Il ne reste plus qu'à s'y connecter via un outil client dédié.