SSH et PowerShell : Configuration du client SSH sous Windows

Il était une fois, vous étiez limité dans le type d’ordinateurs auxquels vous pouviez vous connecter avec Windows PowerShell en utilisant PowerShell Remoting. Étant donné que PowerShell Remoting ne prenait en charge que le fournisseur WsMan, vos chances de vous connecter à des ordinateurs exécutant Linux, par exemple, étaient nulles. Mais en 2015, Microsoft a introduit le support de SSH dans Windows, offrant ainsi un immense potentiel et vous permettant enfin d’utiliser SSH et PowerShell ensemble.

Dans cet article, nous allons plonger et voir comment configurer le client SSH de Windows et comment vous pouvez exploiter SSH et PowerShell Remoting.

Cet article sur SSH et PowerShell fait partie de la série de blogs #PS7Now. Assurez-vous de consulter tous les autres contributeurs de cette série en bas de cet article.

Avant de commencer

Cet article sera un tutoriel pas à pas. Si vous avez l’intention de suivre, assurez-vous de remplir les conditions préalables suivantes :

  • Windows 10 – Tous les exemples utiliseront Windows 10 Build 1903. L’exemple sera dans le même domaine que le serveur Windows distant.
  • PowerShell v6+ installé sur Windows 10 – Tous les exemples utiliseront PowerShell 7 RC2.
  • A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
  • Port TCP 22 disponible sur le serveur distant

Configuration du client SSH (Windows 10)

Avant d’ouvrir une console PowerShell, vous devrez d’abord effectuer quelques tâches ponctuelles pour que SSH et PowerShell fonctionnent ensemble afin de vous assurer que Windows 10 peut se connecter à un serveur SSH distant.

Ajoutez le dossier OpenSSH à la variable d’environnement PATH

OpenSSH est préinstallé sur Windows 10 mais a parfois besoin d’un peu d’aide pour fonctionner avec le Remoting PowerShell. Si vous avez déjà essayé d’utiliser Enter-PSSession, par exemple, pour vous connecter à un système SSH distant et que vous avez rencontré l’erreur ci-dessous, vous devez vous assurer que le chemin vers l’exécutable OpenSSH (ssh.exe) dans la variable d’environnement PATH est correct.

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

Pour ajouter le chemin du dossier OpenSSH à la variable d’environnement PATH, cliquez sur le bouton Start et recherchez paramètres système avancés, puis cliquez sur Afficher les paramètres système avancés comme indiqué ci-dessous.

Adding OpenSSH folder path

Lorsque la fenêtre Propriétés du système s’ouvre, cliquez sur le bouton Variables d’environnement.

Environment Variables in System Properties

Dans la fenêtre Variables d’environnement, sous Variables système, sélectionnez Path et cliquez sur Modifier.

System Variables in the Environment Variables

Dans la fenêtre Modifier la variable d’environnement, cliquez sur Nouveau puis saisissez le chemin où se trouve l’exécutable ssh.exe. Pour ce tutoriel, le chemin est C:\Program Files\OpenSSH comme indiqué ci-dessous. Une fois entré, cliquez sur OK deux fois pour enregistrer la nouvelle valeur.

Editing Environment Variable

Spécifiez le sous-système SSH

Vous devrez maintenant spécifier le sous-système SSH à utiliser lorsque vous vous connectez via SSH sur le serveur Windows distant avec PowerShell. Si vous ne dites pas à PowerShell quel sous-système utiliser, vous obtiendrez inévitablement l’erreur suivante:

Enter-PSSession : Le processus en arrière-plan a signalé une erreur avec le message suivant : La session client SSH s'est terminée avec le message d'erreur : la demande de sous-système a échoué sur le canal 0.

Notez que si vous ne vous connectez pas à une machine Windows Server, vous n’aurez pas besoin d’effectuer ces étapes.

Sur le serveur distant Windows, ouvrez le fichier C:\ProgramData\ssh\ssh_config. Faites défiler jusqu’à la section override default of no subsystems du fichier ssh_config. La section ressemblera à la capture d’écran ci-dessous.

Override Default of no Subsystems

Sous la ligne Subsystem existante, ajoutez le sous-système PowerShell en utilisant la ligne ci-dessous :

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

Enregistrez maintenant le fichier ssh_config et redémarrez le service Windows sshd sur le serveur distant Windows comme illustré ci-dessous.

Get-Service -Name sshd | Restart-Service

Une fois le service redémarré, vous devriez désormais pouvoir vous connecter via SSH et PowerShell.

Connexion via PowerShell et SSH

Maintenant que la configuration est terminée, il est temps de tester le Remoting PowerShell.

Tout d’abord, essayez d’entrer dans une session interactive en utilisant la cmdlet Enter-PSSession. Contrairement à ce à quoi vous pourriez être habitué, vous n’utiliserez pas le paramètre ComputerName. Au lieu de cela, vous utiliserez le paramètre HostName pour spécifier l’ordinateur distant.

Par défaut, le Remoting PowerShell utilise toujours WsMan. Pour remplacer la valeur par défaut, utilisez le paramètre SSHTransport pour indiquer que vous souhaitez vous connecter via SSH et PowerShell.

Lorsque vous essayez de vous connecter pour la première fois avec un nom d’utilisateur et un mot de passe, vous devrez créer une clé privée SSH. Pour ce faire, vous serez invité comme vous pouvez le voir ci-dessous. Lorsque vous êtes invité, tapez ‘y’ pour accepter.

Creating SSH Private Key

Vous serez ensuite invité pour le mot de passe de l’utilisateur avec lequel vous êtes actuellement connecté.

Notez que dans cet exemple, le client Windows 10 et le serveur SSH Windows Server sont dans le même domaine Active Directory. Par défaut, le Remoting PowerShell tentera de s’authentifier avec l’utilisateur connecté. Vous pouvez également utiliser le paramètre Credential pour spécifier un nom d’utilisateur et un mot de passe différents.

Après avoir fourni le mot de passe, vous devriez alors être sur une invite familière de Remoting PowerShell.

Powershell Remoting Prompt

Maintenant, quittez la session avec exit et essayez New-PSSession. Remarquez ci-dessous qu’en utilisant les mêmes paramètres HostName et SSHTransport qu’auparavant, le Transport apparaît maintenant comme SSH.

Vous pouvez également toujours utiliser WsMan comme protocole de transport en utilisant le paramètre ComputerName sans utiliser le paramètre SSHTransport.

Il n’est pas nécessaire d’utiliser un nom d’utilisateur et un mot de passe pour SSH. Vous pouvez plutôt utiliser un fichier de clé privée et utiliser le paramètre KeyFilePath pour fournir l’emplacement.

New PSSession Showing up SSH

N’oubliez pas de nettoyer vos sessions ouvertes avec Get-PSSession | Remove-PSSession!

Résumé

Vous devriez maintenant savoir comment configurer à la fois Windows 10 et Windows Server pour utiliser SSH avec Remoting PowerShell. Une fois configuré, la seule différence entre l’utilisation de WsMan comme protocole de transport et SSH réside dans quelques paramètres !

Si vous souhaitez en savoir plus sur PowerShell et SSH, assurez-vous de consulter l’article de documentation de Microsoft sur le PowerShell Remoting over SSH.

#PS7Now Collaborateurs

Ce message faisait partie d’une série sur PowerShell 7 réalisée par les excellents contributeurs que vous pouvez voir ci-dessous. Assurez-vous de consulter leurs publications et de voir ce qu’ils font sur leurs blogs!

Author Twitter Blog
Josh King @WindosNZ https://toastit.dev/
Adam Bertram @adbertram https://adamtheautomator.com/
Jonathan Medd @jonathanmedd
Thomas Lee @doctordns https://tfl09.blogspot.com/
Prateek Singh @singhprateik https://ridicurious.com
Dave Carroll @thedavecarroll https://powershell.anovelidea.org/
Dan Franciscus @dan_franciscus https://winsysblog.com/
Jeff Hicks @jeffhicks https://jdhitsolutions.com
Josh Duffney @joshduffney http://duffney.io/
Mike Kanakos @MikeKanakos https://www.networkadm.in/
Tommy Maynard @thetommymaynard https://tommymaynard.com//
#PS7Now Contributors

Source:
https://adamtheautomator.com/powershell-ssh/