Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. PowerShell Core et Windows PowerShell
  3. Exécution à distance
Extrait - PowerShell Core et Windows PowerShell Les fondamentaux du langage (2e édition)
Extraits du livre
PowerShell Core et Windows PowerShell Les fondamentaux du langage (2e édition)
7 avis
Revenir à la page d'achat du livre

Exécution à distance

Introduction

Nous avons vu dans le chapitre précédent qu’à travers CIM/WMI il était possible de réaliser un certain nombre d’actions sur des machines à distance. Cependant, nous allons vous montrer à travers ce chapitre qu’il existe bien d’autres moyens d’y parvenir.

L’administration d’ordinateurs à distance est un vaste sujet et tout le monde n’a pas forcément les mêmes attentes. Vaste sujet tout d’abord, car selon la version de l’OS distant (Windows Server ou Windows client) et la version de PowerShell installée, nous n’allons pas pouvoir administrer les machines de la même manière. De plus, depuis que PowerShell est multiplateforme, il existe des différences dans les façons de procéder. En effet, on ne gère pas exactement un OS Windows comme on gère un OS Linux.

Ensuite, en termes d’attente, certains souhaiteront simplement envoyer une commande à distance, comme par exemple redémarrer une machine, récupérer la liste des processus en cours d’exécution, relancer un service arrêté, etc., tandis que d’autres personnes souhaiteront quant à elles exécuter un script sur un ou n ordinateurs distants.

Vous vous en doutez, tous ces scénarios sont bien évidemment possibles avec PowerShell. L’objet...

Communications à distance du Framework .NET

Cette partie ne concerne que Windows PowerShell. En effet, avec PowerShell Core, dans un souci d’homogénéité de fonctionnement multiplateforme, le paramètre -ComputerName n’existe que sur les commandes qui reposent sur WinRM.

PowerShell s’appuie pleinement sur le Framework .NET et à ce titre il bénéficie des fonctionnalités d’exécution à distance de ce dernier. C’est ainsi que quelques commandelettes se sont vues attribuer le paramètre -ComputerName. Ces commandes permettent de s’exécuter sur un ou plusieurs ordinateurs distants sans qu’il ne soit nécessaire de configurer quoi que ce soit. Ça marche, tout simplement (à supposer que les différents firewalls n’entravent pas leur fonctionnement) !

Les communications à distance du Framework .NET représentent la manière la plus simple d’agir sur des machines distantes, mais attention elles s’appuient sur le protocole RPC. Ce protocole utilise des ports dynamiques, vous pourriez donc vite être confronté aux contraintes de sécurité réseau. C’est pourquoi son utilisation est surtout restreinte sur les réseaux de type LAN. Si vous travaillez dans des environnements comportant firewalls et filtrages, nous vous conseillons de vous reporter directement à la section portant sur les communications à distance WinRM.

ATTENTION : À partir de Windows Server 2012 / Windows 8, les protocoles RPC et DCOM sont bloqués par le pare-feu Windows. Donc, à moins d’ajouter des exceptions dans le pare-feu, vous ne pourrez pas utiliser la « communication à distance du Framework .NET ». Nous vous recommandons vivement, pour l’administration de ces platesformes, de préférer le mécanisme de « communication à distance PowerShell ».

1. Prérequis

Être membre du groupe Administrateurs de l’ordinateur distant ou être membre du groupe Administrateurs du domaine.

2. Déterminer les commandes à distance du Framework .NET

Il n’y a malheureusement pas de méthode simple permettant de déterminer, pour une commandelette donnée, sur quel mécanisme repose la fonctionnalité...

Communications à distance Windows PowerShell (WinRM)

Cette partie concerne Windows PowerShell et PowerShell Core mais uniquement sur les plateformes Windows.

Le mécanisme de communication à distance Windows PowerShell, présent depuis la version 2.0, s’appuie quant à lui sur le protocole WS-Man, appelé aussi « Gestion à distance de Windows (WinRM) » ou en anglais « Windows Remote Management ». WinRM est l’implémentation faite par Microsoft du standard WS-Man.

WinRM est une technologie qui a émergé avec Windows Server 2003 R2. WinRM, qui signifie Windows Remote Management, permet d’envoyer des requêtes de gestion à des machines sur un réseau TCP/IP via les ports 5985 (HTTP) / 5986 (HTTPS). Le protocole qui se cache derrière cette technologie s’appelle WS-Management. Ce dernier est une spécification du DMTF (Distributed Management Task Force), définissant un protocole de communication pour l’administration des serveurs, équipements, et applications basés sur les Web Services (SOAP). WS-Management est devenu le 28 janvier 2013 un standard officiel ISO (International Organization for Standardization).

À l’instar de WBEM, WS-Management apporte un standard (schéma XML) orienté gestion matérielle pour faciliter l’interopérabilité entre des systèmes hétérogènes au sein d’une infrastructure IT.

1. Authentification et chiffrement des communications

La sécurité des échanges entre deux ordinateurs repose sur deux points essentiels qui sont l’authentification et le chiffrement des données en transit sur le réseau.

Pour que deux ordinateurs se fassent confiance, cela passe nécessairement par un tiers de confiance commun aux deux parties. Dans un domaine Active Directory, ce tiers est matérialisé par les contrôleurs de domaine. Hors domaine, ce tiers sera une autorité de certification (PKI). Ainsi, deux machines disposant chacune d’un certificat serveur délivré par une même autorité de certification se feront naturellement confiance. Cette authentification mutuelle garantit qu’une attaque de type « man in the middle » ne puisse pas avoir lieu car le client...

Communications à distance sur SSH (PowerShell Core uniquement)

Attention : à l’heure où nous écrivons ces lignes, la version d’OpenSSH pour Windows est encore en version bêta. Il se peut donc qu’il y ait quelques subtiles différences avec la version finale

Depuis l’arrivée de PowerShell Core, il est possible d’utiliser SSH comme protocole de transport à la place de WinRM. Cela ouvre des scénarios qui n’étaient pas envisageables jusqu’alors, tels que l’administration d’OS Linux ou Mac OS depuis une machine Windows, mais aussi l’inverse !

Pour ce faire et avant toute chose, il va nous falloir installer la couche SSH fournie par OpenSSH. Celle-ci apporte à la fois un client SSH (ssh.exe) mais aussi un serveur SSH (sshd.exe). Win32 OpenSSH est le portage de la version OpenSSH pour OpenBSD.

1. Installation d’OpenSSH sur Windows

La première chose à faire est de télécharger la dernière version à l’adresse suivante : https://github.com/PowerShell/Win32-OpenSSH/releases/. Ensuite, exécutez scrupuleusement les opérations ci-après :

 Téléchargez le fichier Zip de la version 64 bits si vous réalisez l’installation sur un OS de type Windows Server 2016 comme nous allons le faire ici.

 Décompressez l’archive à l’emplacement C:\Program Files\OpenSSH.

 Positionnez-vous à l’emplacement où vous avez décompressé les fichiers puis, dans une console PowerShell lancée en mode Administrateur, exécutez la ligne de commande suivante :


PS > powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
 

Nous allons maintenant configurer le pare-feu afin d’ouvrir le port 22 pour autoriser les connexions SSH entrantes :


PS > New-NetFirewallRule -Name sshd ` 
     -DisplayName 'OpenSSH Server (sshd)' ` 
     -Enabled True -Direction Inbound -Protocol TCP ` 
     -Action Allow -LocalPort 22
 

 Démarrez le service SSH :


PS > Start-Service sshd
 

Le démarrage du service va créer un fichier d’hôte SSH ainsi que le fichier de configuration sshd_config dans %programdata%\ssh (notez qu’il s’agit d’un répertoire...

Conclusion

Vous avez pu voir à travers ce chapitre qu’il existait de multiples façons d’administrer des machines à distance (RPC, WinRM, SSH) et qu’en fonction de votre contexte de sécurité et des systèmes d’exploitation que vous avez à administrer, vous ne procéderez pas toujours de la même façon.

PowerShell 6 a fait un énorme bond en avant en nous offrant la possibilité d’administrer des machines Linux et Mac OS avec une déconcertante facilité, notamment depuis la prise en charge de SSH.

Ceci étant, tout n’est pas forcément rose, car vous avez pu vous rendre compte que rebondir d’une machine à une autre relève parfois du défi ! Gageons qu’à l’avenir Microsoft nous propose des solutions plus faciles à mettre en œuvre qu’aujourd’hui.

Quoi qu’il en soit, le dilemme n’est pas simple car s’opposent d’un côté la facilité d’administration et de l’autre la sécurité. Vaste sujet…