Comment utiliser le client SSH natif de Windows 10 ?
Sommaire
I. Présentation
Vous ne le savez peut-être pas, mais Windows 10 intègre un client SSH afin de vous permettre d'établir une connexion SSH sur un serveur Unix, un hôte ESX, un switch, etc... De quoi remplacer l'éternel Putty ou encore MTPutty. Ce client SSH est basé sur OpenSSH.
Ce client SSH natif à Windows est disponible au sein de Windows 10 et Windows Server 2019. Nous allons voir comment installer le client SSH et comment l'utiliser sous Windows 10.
Ce tutoriel est disponible au format vidéo :
II. Installer le client SSH sous Windows 10
Je vous invite à ouvrir une console PowerShell et à vérifier si le client SSH est déjà installé ou non sur votre machine. Pour cela, nous allons utiliser la commande Get-WindowsCapability :
Get-WindowsCapability -Online | Where{ $_.Name -like 'OpenSSH.Client*' }
Ce client SSH est distribué au travers des fonctionnalités à la demande de Windows 10. Il est à noter qu'il est installé par défaut sur Windows Server 2019 ainsi que Windows 10 depuis la version 1809.
La commande précédente permet de s'en assurer. Dans le cas où il n'est pas installé, il est possible de procéder à l'installation.
Voici comment l'installer à l'aide de PowerShell :
Add-WindowsCapability -Online -Name OpenSSH.Client
En guise d'alternative, il est tout à fait possible d'utiliser DISM. Ce qui donne :
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Bien sûr, c'est également possible à partir de l'interface graphique de Windows 10 à l'aide de l'ajout d'une fonctionnalité.
Les binaires d'OpenSSH sont installés directement dans le dossier "C:\Windows\System32\OpenSSH\" et non dans le dossier "Programmes".
Voici la liste des binaires inclus :
- scp.exe : méthode de transfert de fichiers via SSH
- sftp.exe : méthode de transfert de fichiers via FTP (dans SSH)
- ssh.exe : le client SSH
- ssh-add.exe : ajouter une clé SSH à la base de données locale de l'agent
- ssh-agent.exe : gestion des clés SSH de l'hôte
- ssh-keygen.exe : générer des clés SSH
- ssh-keyscan.exe : collecter les clés publiques à partir de plusieurs hôtes
Dans ce tutoriel, nous allons utiliser le client SSH donc "ssh.exe" ainsi que "scp.exe" pour le transfert de fichiers. D'ailleurs, si l'on exécute "ssh" dans une console PowerShell ou une Invite de commande, on voit que l'on est prêt à utiliser l'outil.
À titre d'information et avant de poursuivre, voici comment désinstaller le client SSH :
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
III. Utiliser le client SSH sous Windows 10
A. Connexion SSH simple
La commande "ssh" c'est bien beau, mais il va falloir inclure des arguments derrière pour établir une connexion sur un hôte distant.
À la suite de "ssh", nous allons préciser le nom d'utilisateur et l'hôte cible. Par défaut, le client SSH va prendre le port 22 pour la connexion, à savoir le port par défaut de SSH.
Par exemple pour se connecter avec l'utilisateur "admin" sur l'hôte ayant l'adresse IP "192.168.1.1" :
ssh [email protected]
En toute logique, le port SSH doit être personnalisé sur l'hôte distant. Pour préciser le port, il va tout simplement falloir utiliser l'option "-p", par exemple avec le port "22222" :
ssh [email protected] -p 22222
Lors de la première connexion, il sera nécessaire d'accepter la clé de l'hôte distant. Pour cela, saisissez "yes" et appuyez sur "Entrée" dans la console. À partir de ce moment-là, le mot de passe sera demandé : saisissez-le.
Voilà, vous êtes connecté et pouvez profiter de votre shell SSH.
B. Connexion SSH avec une clé
Il est à noter que l'empreinte de la clé acceptée sera stockée dans le fichier suivant : "C:\Users\<utilisateur>\.ssh\known_hosts".
Au-delà d'utiliser un port personnalisé pour le SSH, ce qui est intéressant en termes de sécurité c'est de s'authentifier à l'aide d'une paire de clés RSA.
Si vous avez déjà votre clé en votre possession, vous pouvez l'ajouter grâce à votre base locale grâce à la commande ssh-add.exe. Il suffit de spécifier le chemin de la clé privée :
ssh-add "C:\Users\Florian\.ssh\id_rsa"
Vous allez probablement obtenir l'erreur suivante :
unable to start ssh-agent service, error :1058
En fait, il faut démarrer le service "ssh-agent". Ce que nous allons faire, c'est d'une part le démarrer et d'autre part, le configurer en démarrage automatique.
Set-Service ssh-agent -StartupType 'Automatic' Start-Service ssh-agent
Ensuite, relancez la commande ssh-agent. Il ne reste plus qu'à lancer une connexion SSH à l'aide
ssh [email protected] -i "C:\Users\Florian\.ssh\id_rsa"
Bien entendu, il est également possible d'ajouter l'option "-p" en complément pour préciser un port personnalisé.
IV. Transfert de fichiers avec SCP sous Windows 10
Pour terminer ce tutoriel, nous allons parler de l'exécutable scp.exe. Comme je le disais, il sert à réaliser des transferts de fichiers, à l'instar de sftp.exe qui s'appuie sur SFTP, ici nous réalisons le transfert via SCP.
L'objectif va être de copier un fichier du PC local vers l'hôte distant, mais aussi de faire l'inverse.
A. Envoyer un fichier avec scp.exe
Sur le principe, c'est un peu comme avec ssh, il faut préciser le nom d'utilisateur et l'hôte distant, mais ici il faudra ajouter le fichier source et le dossier de destination.
Par exemple pour envoyer le fichier "C:\TEMP\Fichier.txt" dans le dossier "/home/florian" sur le serveur 192.168.1.1 à l'aide du compte "Florian" :
scp.exe "C:\TEMP\Fichier.txt" [email protected]:/home/florian
Un port peut être précisé à l'aide de l'option -P :
scp.exe -P 22222 "C:\TEMP\Fichier.txt" [email protected]:/home/florian
L'option "-r" est également intéressante puisqu'elle va permettre d'envoyer tout un dossier et son contenu avec récursivité. Cela va permettre de prendre tous les fichiers et tous les sous-dossiers à partir de la racine.
Pour envoyer tout le contenu du dossier "C:\TEMP", voici un exemple :
scp.exe -r "C:\TEMP\" [email protected]:/home/florian
B. Télécharger un fichier avec scp.exe
À l'inverse, comme je le disais nous pouvons également télécharger un fichier à partir de l'hôte distant sur le PC local. Dans ce cas, nous devons inverse la source et la destination par rapport à la commande précédente.
Voici un exemple pour récupérer le fichier "/home/florian/MonImage.png" et le stocker en local dans "C:\TEMP".
scp.exe [email protected]:/home/florian/MonImage.png "C:\TEMP\"
V. Utilisation de sftp.exe
L'alternative à SCP, c'est le SFTP c'est-à-dire du FTP encapsulé dans un flux SSH. Le fonctionnement est un peu différent : on va se connecter en SFTP sur l'hôte distant, puis une fois la connexion établie, nous allons pouvoir exécuter des commandes pour lister le contenu distant, envoyer un fichier, ou télécharger un fichier.
Par exemple, pour se connecter, cela donne :
sftp.exe -P 22222 [email protected]
Une fois connecté, le prompt "sftp>" va s'afficher. Pour envoyer un fichier il faudra utiliser la commande suivante :
sftp> put MonFichier.txt
Ensuite, la commande "ls" va permettre de lister le contenu de l'hôte distant, ce sera utile si l'on veut s'assurer qu'il est bien envoyé :
sftp> ls
À l'inverse, pour télécharger un fichier on utilise la commande "get" :
sftp> get MonFichier.txt
Finalement, les personnes habituées à utiliser SSH sous Linux ne devraient pas être perdues pour utiliser le client SSH de Windows et les différents outils associés comme scp.exe et sftp.exe, celui-ci étant basé sur OpenSSH.
Merci pour l’article d’amorçe sur le sujet, est-ce qu’il est possible d’avoir une configuration locale ? de type :
« `
Host ma-machine-*
user avrel
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ProxyJump rebond1
DynamicForward localhost:10331
« `
Bonjour vebryn,
Je n’ai pas encore eu l’occasion de tester, mais il faudrait voir au niveau du fichier de configuration « c:\users\username\.ssh\config ». Il peut être créé s’il n’existe pas. Je suis preneur de retours à ce sujet 🙂
Cordialement,
Florian
Bonjour,
J’ai un problème avec le SSH sur mon ordinateur.
Lorsque je me connecte à mon serveur SSH avec mon téléphone portable il n’y a aucun problème et lorsque j’essaye avec mon ordinateur sous windows 10 je me retrouve avec le message d’erreur suivant : « ssh: connect to host 192.168.1.54 port 22: Permission denied »
Est il possible que le pare feu windows bloque les connexions sortantes? Avez vous une idée de comment résoudre mon problème?
Je vous remercie pour votre aide.
Jonathan
PARAMETRER LE PARFEU DU SERVEUR SI LE PORT EST DIFFERENT DU 22
Création d’une règle dans le ParFeu SERVEUR pour le port 222.
New-NetfirewallRule -Name ssh-agent -DisplayName ‘OpenSSH Authentication Agent – Port 222’ -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 222
Je suis sur Windows 10 et personnellement il m’est impossible d’utiliser les Host pour paramétrer automatiquement les informations à rentrer lors d’une connexion en fonction de tels ou tels serveur. Les informations host sont tout simplement ignoré comme si cela n’exister pas. Toujours pas trouver pourquoi ce phénomène. User, Hostname, etc non reconnu ? (tout le paramètre par défaut ou non de SSH n’y change rien).