PSRemoting pour Linux et Windows : Guide pratique

L’un des grands avantages de l’évolution de PowerShell ces dernières années est qu’il adopte de nombreuses façons d’interagir avec des machines non-Windows. L’un de ces changements a été de prendre en charge PSRemoting via SSH. PSRemoting via SSH signifie également avoir PSRemoting sur Linux!

Bien que la configuration de PSRemoting pour fonctionner avec SSH et Linux nécessite une petite configuration pour fonctionner, cela vous permet d’utiliser PowerShell pour interagir avec des machines Linux de manière native.

Dans ce tutoriel, vous allez apprendre comment configurer un client Windows pour se connecter à un ordinateur Linux (CentOS) en utilisant PSRemoting via SSH et vice versa. Vous apprendrez comment vous authentifier à l’aide d’un mot de passe et en utilisant un certificat.

Articles connexes : PowerShell Remoting: The Ultimate Guide

Prérequis

Ce tutoriel sera une procédure pas à pas. Si vous souhaitez suivre, assurez-vous d’avoir les éléments suivants à l’avance :

  • A Windows 10 build 1809 or greater machine. The tutorial will use Windows Server 2019 Standard as the remote server.
  • A Linux machine that supports PowerShell 7. The tutorial will use CentOS 8.
  • Des droits sudo sur la machine Linux et des droits d’administrateur local sur la machine Windows. Après la configuration initiale, certains de ces droits peuvent être révoqués.

Configuration de Windows (Client) pour PSRemoting via SSH

Tout d’abord, vous devez configurer le client PSRemoting (PowerShell) sur votre client Windows. Pour cela, vous devrez installer et configurer à la fois PowerShell 7+ et OpenSSH.

Installation de PowerShell 7+

Tout d’abord, installez PowerShell 7+. Ce tutoriel ne couvrira pas la procédure pour le faire. Pour apprendre comment procéder, consultez le lien ci-dessous.

Installation d’OpenSSH

Vous devrez également installer OpenSSH. OpenSSH est le package que PSRemoting utilisera pour se connecter à l’ordinateur Linux distant. Vous pouvez installer OpenSSH via PowerShell en utilisant la commande Get-WindowsCapability comme indiqué ci-dessous.

Selon que vous prévoyez que votre hôte Windows soit un client et/ou un serveur, cela dépend duquel des composants Windows vous devez installer. Si vous vous connectez depuis le serveur Windows vers Linux, vous avez seulement besoin du client OpenSSH. Si vous vous connectez depuis Linux vers le serveur Windows, vous avez seulement besoin du serveur OpenSSH.

La commande ci-dessous recherche toutes les fonctionnalités Windows dont le nom commence par OpenSSH et les installe, donc elle installera à la fois le client et le serveur.

Get-WindowsCapability -Online | Where-Object {$_.Name -like 'OpenSSH*'} | Add-WindowsCapability -Online

Si vous voulez uniquement installer le client, modifiez le filtre dans le bloc de script Where-Object pour OpenSSH.Client* et pour le serveur, le filtre devrait être OpenSSH.Server*.

Lié : Guide de démarrage avec SSH et PowerShell

Démarrage du serveur SSH

Une fois OpenSSH installé, il ouvrira le pare-feu Windows sur le port 22, mais il ne démarrera pas le service serveur OpenSSH pour écouter sur le port. Pour démarrer le serveur OpenSSH sur Windows Server, exécutez la commande PowerShell suivante pour démarrer le serveur OpenSSH et définir le service pour démarrer au démarrage.

Start-Service sshd
Set-Service sshd -StartupType Automatic

Configuration de la configuration OpenSSH

Le prochain pas consiste à modifier le fichier de configuration du démon sshd_config. À l’intérieur de ce fichier, vous devez d’abord confirmer que l’authentification par mot de passe est activée et également ajouter le sous-système PowerShell.

Cette partie du tutoriel configure la méthode la plus simple en utilisant des mots de passe. Vous apprendrez comment configurer l’authentification SSH à l’aide de certificats plus tard dans ce tutoriel.

  1. Ouvrez le fichier de configuration dans votre éditeur de texte préféré à l’emplacement C:\ProgramData\ssh\sshd_config.

2. Confirmez que l’authentification par mot de passe est activée, soit en commentant la ligne PasswordAuthentication avec un # au début, soit en la définissant sur yes.

Password Authentication

3. Ajoutez le sous-système PowerShell. Pour PowerShell 7, ajoutez la ligne : Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo.

  • L’option -sshs est utilisée pour permettre à PowerShell 7 de s’exécuter dans SSH en tant que sous-système.
  • L’option -NoLogo fait en sorte que PowerShell masque les informations de copyright lorsqu’il démarre, assurant qu’il n’y a pas de sortie inattendue lors du démarrage de la session SSH.

4. Enregistrez et fermez le fichier de configuration.

5. Redémarrez le service sshd Windows. Vous pouvez le faire avec PowerShell en exécutant Restart-Service sshd.

Vous devriez maintenant avoir tout configuré pour vous connecter depuis (client) et vers (serveur) ce serveur Windows en utilisant PSRemoting via SSH.

Configuration de Linux (serveur) pour PSRemoting via SSH

Ensuite, nous allons configurer Linux avec une configuration similaire; installer PowerShell et configurer OpenSSH.

Notez que, comme nous utilisons CentOS, certaines commandes peuvent être différentes si vous utilisez une autre distribution.

Installation de PowerShell 7+

Tout d’abord, installez PowerShell 7. Ce tutoriel ne couvrira pas la procédure d’installation. Assurez-vous plutôt de consulter le lien suivant.

Lié: Comment télécharger et installer PowerShell 7 sur Windows, macOS et Linux

Configuration d’OpenSSH

Tout comme Windows Server, vous aurez besoin d’OpenSSH. Cependant, contrairement à Windows, OpenSSH est probablement déjà installé. Pour ce tutoriel utilisant CentOS 8, la machine Linux a déjà à la fois le client et le serveur installés par défaut, mais vous pouvez vérifier en utilisant la commande suivante:

rpm -qa openssh*

Si le client et le serveur sont installés, vous devriez obtenir quelque chose de similaire à la sortie ci-dessous.

Configuring OpenSSH

Configurez le fichier de configuration SSH en:

  1. Ouvrant le fichier sshd_config en exécutant sudo vi /etc/ssh/sshd_config.

2. Ajoutant le sous-système PowerShell comme sur Windows Server en ajoutant la ligne suivante au fichier de configuration.

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo

3. Quittez vi et enregistrez le fichier.

4. Redémarrez le démon ssh pour appliquer les modifications en exécutant sudo systemctl restart sshd.

Par défaut, l’authentification par mot de passe et par clé publique sera activée dans la plupart des cas, y compris CentOS 8. Pas besoin de les ajouter ici.

Connexion à/depuis Windows/Linux avec Authentification par Mot de Passe

Une fois que vous avez tout configuré sur les machines Linux et Windows, il est temps de mettre à profit le travail que vous avez accompli. Essayons maintenant de nous connecter de Windows à Linux et vice versa en utilisant l’authentification par mot de passe.

L’authentification basée sur un mot de passe semble familière à l’utilisation de SSH avec un nom d’utilisateur et un mot de passe.

Commandes de Connexion

Pour tester la connexion avec PSRemoting via SSH de Windows à Linux ou de Linux à Windows, utilisons à la fois une session « ad-hoc » en utilisant la cmdlet Invoke-Command et également une session persistante en utilisant New-PSSession.

Connexe: Invoke-Command : La meilleure façon d’exécuter du code à distance

Testez la connexion PSRemoting en utilisant Invoke-Command en :

  1. Ouvrant votre console PowerShell 7.

Définissant les paramètres pour la cmdlet Invoke-Command. Dans ce cas, les paramètres ci-dessous se connecteront à un ordinateur appelé SRV1 en utilisant un compte utilisateur local sur SRV1 appelé User.

$SessionParams = @{
     HostName = SRV1
     UserName = user
     SSHTransport = $true
 }

Exécutant Invoke-Command en éparpillant les paramètres ci-dessus et en exécutant une commande (dans ce cas, Get-Process) à l’intérieur d’un scriptblock.

Connexe : PowerShell Splatting : Qu’est-ce que c’est et comment ça marche ?

Invoke-Command @SessionParams -ScriptBlock {Get-Process}

Ensuite, vous devriez voir une liste de tous les processus en cours d’exécution sur l’ordinateur SRV1.

Vous pouvez également établir une connexion persistante qui vous permet de vous connecter de manière interactive et d’exécuter des commandes de manière interactive en :

  1. Fournissant les paramètres ci-dessus et en les transmettant à la cmdlet New-PSSession.

2. Se connectant à cette session de manière interactive en utilisant la cmdlet Enter-PSSession.

Create a persistent session
 $session = New-PSSession @SessionParams
 Connect interactively
 Enter-PSSession -Session $session

3. Après avoir exécuté la commande Enter-PSSession ci-dessus, vous serez invité pour le mot de passe de l’utilisateur. Après vous être authentifié, vous serez connecté à l’autre machine dans PowerShell.

Remarquez que aucune des commandes ci-dessus n’a nécessité le paramètre commun Credential pour fournir un nom d’utilisateur et un mot de passe pour la connexion. Au lieu de cela, nous avons utilisé le paramètre SSHTransport. SSH n’utilise pas le même processus d’authentification que Windows pour aller d’un ordinateur Windows à un autre, il ne peut donc pas interpréter les objets PSCredential.

Connexe : Utilisation de la cmdlet Get-Credential de PowerShell et tout ce qui concerne les informations d’identification.

En utilisant cette approche, vous pouvez également exploiter des sessions déconnectées.

Mise en place de l’authentification basée sur une clé publique.

Bien que l’authentification basée sur un mot de passe soit facile à configurer et simple à utiliser, elle présente deux problèmes.

  • Il n’y a pas de moyen de s’authentifier sans que quelqu’un exécute manuellement les commandes de manière sécurisée.
  • Vous envoyez un mot de passe à travers le réseau.

Bien que le mot de passe, dans ce cas, soit crypté dans la connexion SSH, le serveur reçoit le mot de passe en texte brut. Si le serveur est compromis de quelque manière que ce soit, cela pourrait devenir un problème de sécurité.

Génération de clés publiques/privées

Lors de l’utilisation de n’importe quel type d’authentification par clé publique, vous devez d’abord générer une clé publique à partir du client. Cette exigence s’applique à la fois à Linux et à Windows.

Sur la machine du serveur Linux ou Windows :

  1. Exécutez ssh-keygen pour générer la paire de clés.

Si vous exécutez ssh-keygen sur Linux, sachez qu’il générera une paire de clés RSA par défaut. De nombreux nouveaux systèmes d’exploitation Linux n’autoriseront pas l’utilisation de paires de clés RSA pour l’authentification par défaut. Pour corriger cela, utilisez ssh-keygen -t ed25519.

2. Vous serez invité à fournir un chemin pour stocker la clé privée et une phrase secrète pour crypter la clé privée. Dans le cas où vous ne souhaitez pas fournir de mot de passe lors de l’authentification, vous pouvez laisser la phrase secrète vide.

3. Windows uniquement : Exécutez les commandes suivantes depuis PowerShell où <ProfilePath> est le chemin de votre profil (probablement C:\Users\NomUtilisateur).

Set-Service ssh-agent -StartupType Automatic
 Start-Service ssh-agent
 ssh-add .ssh\id_ed25519
 Remove-Item ~.ssh\id_ed25519

L’implémentation de OpenSSH par Windows dispose d’un service ssh-agent qui vous permet de stocker des clés privées dans le contexte de sécurité Windows de l’utilisateur connecté. Cela vous permettra d’importer votre clé privée SSH dans le ssh-agent, puis de supprimer la clé du système de fichiers pour renforcer sa sécurité.

4. Maintenant, copiez la clé publique générée (<répertoire personnel de l’utilisateur>\.ssh\id_ed25519.pub) vers le serveur auquel vous souhaitez vous connecter. Windows ne fournit pas d’outil pour effectuer cette copie, elle peut être réalisée avec SCP. Exécutez la commande ci-dessous pour copier la clé publique vers la machine Linux.

scp C:\Users\Username.ssh\id_ed25519.pub username@ServerB:~/.ssh/authorized_keys

Pour copier de Linux vers Windows :

scp ~/.ssh/id_ed25519.pub administrator@ServerA:.ssh/authorized_keys

5. Entrez le mot de passe de l’utilisateur connecté. Une fois saisi, PowerShell/Bash copiera la clé et vous serez déconnecté de la machine distante.

Connexion vers/depuis Windows/Linux avec une authentification par clé publique

Une fois que vous avez configuré les clés publique et privée, la connexion vers/depuis Windows et Linux devrait être facile. C’est presque identique à l’authentification basée sur un mot de passe.

Pour vous connecter avec une clé publique sur Windows, utilisez les mêmes commandes que celles indiquées dans Commandes de Connexion ci-dessus. Vous remarquerez une seule différence : vous ne serez pas invité à fournir des informations d’identification.

Voici un exemple de connexion de Linux vers Windows en utilisant l’option -v pour voir ce qui se passe pendant la connexion.

Example of connecting from Linux to Windows using the -v switch

Source:
https://adamtheautomator.com/psremoting-linux/