Vous pouvez maintenant utiliser Linux pour administrer à distance des machines Windows
Avec un accès distant PowerShell via SSH

Le , par Stéphane le calme, Chroniqueur Actualités
L’accès distant PowerShell utilise normalement WinRM pour la négociation de la connexion et le transport des données. SSH a été choisi pour cette implémentation de l’accès distant, car il est maintenant disponible pour les plateformes Linux et Windows, et permet un véritable accès distant PowerShell multiplateforme. Cependant, WinRM fournit également un modèle d’hébergement robuste pour les sessions à distance PowerShell, ce que cette implémentation ne fait pas encore. Cela signifie aussi que la configuration de point de terminaison distant PowerShell et JEA (Just Enough Administration) ne sont pas encore pris en charge dans cette implémentation.

L’accès distant SSH PowerShell vous permet un accès distant pour une session PowerShell de base entre des ordinateurs Windows et Linux. Pour cela, vous devez créer un processus hébergeant PowerShell sur l’ordinateur cible en tant que sous-système SSH. Microsoft assure qu’au final, il sera remplacé en un modèle d’hébergement plus général, similaire au mode de fonctionnement de WinRM pour prendre en charge la configuration de point de terminaison et JEA.

Les applets de commande New-PSSession, Enter-PSSession et Invoke-Command ont maintenant un nouvel ensemble de paramètres pour faciliter cette nouvelle connexion d’accès distant

Code PowerShell : Sélectionner tout
[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Ce nouvel ensemble de paramètres changera probablement mais pour l’instant, il vous permet de créer des sessions PowerShell SSH, avec lesquelles vous pouvez interagir depuis la ligne de commande, ou sur lesquelles vous pouvez appeler des commandes et des scripts. Vous spécifiez l’ordinateur cible avec le paramètre HostName et vous fournissez le nom d’utilisateur avec UserName. Lors de l’exécution interactive des applets de commande sur la ligne de commande PowerShell, un mot de passe vous est demandé. Vous pouvez cependant aussi utiliser l’authentification par clé SSH et fournir un chemin de fichier de clé privée avec le paramètre KeyFilePath.


Informations générales sur l’installation

SSH doit être installé sur tous les ordinateurs. Vous devez installer le client (ssh.exe) et le serveur (sshd.exe) pour pouvoir tester l’accès distant vers et depuis les ordinateurs. Pour Windows, vous devez installer OpenSSH Win32 à partir de GitHub. Pour Linux, vous devrez installer SSH (y compris le serveur sshd) approprié pour votre plateforme. Il vous faut également une version ou un package récent de PowerShell, provenant de GitHub et ayant la fonctionnalité d’accès distant SSH. Les sous-systèmes SSH sont utilisés pour établir un processus PowerShell sur l’ordinateur distant ; le serveur SSH doit être configuré pour cela. De plus, vous devez activer l’authentification par mot de passe et éventuellement l’authentification basée sur une clé.

Configuration sur un ordinateur Windows
  1. Installer la dernière version de PowerShell Core pour Windows
    Vous pouvez savoir si elle dispose de la prise en charge de l’accès distant SSH en examinant les ensembles de paramètres pour New-PSSession
    Code PowerShell : Sélectionner tout
    1
    2
    PS> Get-Command New-PSSession -syntax 
    New-PSSession [-HostName] <string[]> [-Name <string[]>] [-UserName <string>] [-KeyFilePath <string>] [-SSHTransport] [<CommonParameters>]
  2. Installez la dernière version de OpenSSH Win32 depuis GitHub en utilisant les instructions d’installation
  3. Ouvrez le fichier sshd_config à l’emplacement où vous avez installé OpenSSH Win32 :
    • Vérifiez que l’authentification par mot de passe est activée : PasswordAuthentication yes
    • Ajoutez une entrée de sous-système PowerShell et remplacez c:/program files/powershell/6.0.0/pwsh.exe par le chemin correct vers la version que vous voulez utiliser
      Code PowerShell : Sélectionner tout
      Subsystem    powershell c:/program files/powershell/6.0.0/pwsh.exe -sshs -NoLogo -NoProfile
    • Vous pouvez éventuellement activer l’authentification par clé : PubkeyAuthentication yes
  4. Redémarrez le service sshd : Restart-Service sshd
  5. Ajoutez le chemin où OpenSSH est installé à votre variable d’environnement PATH :
    • Il devrait s’agir de C:\Program Files\OpenSSH\
    • Ceci permet au système de trouver ssh.exe



Configuration sur un ordinateur Linux (Ubuntu 14.04)
  1. Installez la dernière version PowerShell pour Linux à partir de GitHub
  2. Installez Ubuntu SSH si nécessaire
    Code bash : Sélectionner tout
    1
    2
    sudo apt install openssh-client 
    sudo apt install openssh-server
  3. Ouvrez le fichier sshd_config à l’emplacement /etc/ssh
    • Vérifiez que l’authentification par mot de passe est activée : PasswordAuthentication yes
    • Ajoutez une entrée de sous-système PowerShell
      Code bash : Sélectionner tout
      Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile
    • Vous pouvez éventuellement activer l’authentification par clé : PubkeyAuthentication yes
  4. Redémarrez le service sshd
    Code bash : Sélectionner tout
    sudo service sshd restart


Configuration sur un ordinateur MacOS
  1. Installez la dernière version de PowerShell pour MacOS
  2. Vérifiez que l’accès distant SSH est activé en suivant ces étapes :
    • Ouvrez System Preferences
    • Cliquez sur Sharing
    • Vérifiez Remote Login, qui doit être Remote Login: On
    • Autorisez l’accès aux utilisateurs appropriés
  3. Ouvrez le fichier sshd_config à l’emplacement /private/etc/ssh/sshd_config
    • Utiliser votre éditeur préféré ou
      Code bash : Sélectionner tout
      sudo nano /private/etc/ssh/sshd_config
    • Vérifiez que l’authentification par mot de passe est activée : PasswordAuthentication yes
    • Ajoutez une entrée de sous-système PowerShell
      Code : Sélectionner tout
      Subsystem powershell /usr/local/bin/powershell -sshs -NoLogo -NoProfile
    • Vous pouvez éventuellement activer l’authentification par clé : PubkeyAuthentication yes
  4. Redémarrez le service sshd
    Code bash : Sélectionner tout
    1
    2
    sudo launchctl stop com.openssh.sshd 
    sudo launchctl start com.openssh.sshd

Exemple d’accès distant PowerShell

Le moyen le plus simple de tester l’accès distant est simplement de l’essayer sur un seul ordinateur. Dans l’exemple proposé par Microsoft, l’ingénieur a créé une session à distance avec le même ordinateur sur une zone Linux. Notez qu’il a utilisé des applets de commande PowerShell à partir d’une invite de commandes : nous voyons donc des invites SSH demandant de vérifier l’ordinateur hôte ainsi que des demandes de mot de passe. Vous pouvez faire de même sur un ordinateur Windows pour vérifier que l’accès distant fonctionne, puis établir un accès distant entre des ordinateurs en changeant simplement le nom d’hôte.

Code PowerShell : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 
# Linux to Linux 
# 
PS /home/TestUser> $session = New-PSSession -HostName UbuntuVM1 -UserName TestUser 
The authenticity of host 'UbuntuVM1 (9.129.17.107)' cannot be established. 
ECDSA key fingerprint is SHA256:2kCbnhT2dUE6WCGgVJ8Hyfu1z2wE4lifaJXLO7QJy0Y. 
Are you sure you want to continue connecting (yes/no)? 
TestUser@UbuntuVM1s password: 
  
PS /home/TestUser> $session 
  
 Id Name            ComputerName    ComputerType    State         ConfigurationName     Availability 
 -- ----            ------------    ------------    -----         -----------------     ------------ 
  1 SSH1            UbuntuVM1       RemoteMachine   Opened        DefaultShell             Available 
  
PS /home/TestUser> Enter-PSSession $session 
  
[UbuntuVM1]: PS /home/TestUser> uname -a 
Linux TestUser-UbuntuVM1 4.2.0-42-generic 49~14.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 
  
[UbuntuVM1]: PS /home/TestUser> Exit-PSSession 
  
PS /home/TestUser> Invoke-Command $session -ScriptBlock { Get-Process powershell } 
  
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                    PSComputerName 
-------  ------    -----      -----     ------     --  -- -----------                    -------------- 
      0       0        0         19       3.23  10635 635 powershell                     UbuntuVM1 
      0       0        0         21       4.92  11033 017 powershell                     UbuntuVM1 
      0       0        0         20       3.07  11076 076 powershell                     UbuntuVM1 
  
  
# 
# Linux to Windows 
# 
PS /home/TestUser> Enter-PSSession -HostName WinVM1 -UserName PTestName 
PTestName@WinVM1s password: 
  
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver 
  
Microsoft Windows [Version 10.0.10586] 
  
[WinVM1]: PS C:\Users\PTestName\Documents> 
  
# 
# Windows to Windows 
# 
C:\Users\PSUser\Documents>pwsh.exe 
PowerShell 
Copyright (c) Microsoft Corporation. All rights reserved. 
  
PS C:\Users\PSUser\Documents> $session = New-PSSession -HostName WinVM2 -UserName PSRemoteUser 
The authenticity of host 'WinVM2 (10.13.37.3)' can't be established. 
ECDSA key fingerprint is SHA256:kSU6slAROyQVMEynVIXAdxSiZpwDBigpAF/TXjjWjmw. 
Are you sure you want to continue connecting (yes/no)? 
Warning: Permanently added 'WinVM2,10.13.37.3' (ECDSA) to the list of known hosts. 
PSRemoteUser@WinVM2's password: 
PS C:\Users\PSUser\Documents> $session 
  
 Id Name            ComputerName    ComputerType    State         ConfigurationName     Availability 
 -- ----            ------------    ------------    -----         -----------------     ------------ 
  1 SSH1            WinVM2          RemoteMachine   Opened        DefaultShell             Available 
  
  
PS C:\Users\PSUser\Documents> Enter-PSSession -Session $session 
[WinVM2]: PS C:\Users\PSRemoteUser\Documents> $PSVersionTable 
  
Name                           Value 
----                           ----- 
PSEdition                      Core 
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...} 
SerializationVersion           1.1.0.1 
BuildVersion                   3.0.0.0 
CLRVersion 
PSVersion                      6.0.0-alpha 
WSManStackVersion              3.0 
PSRemotingProtocolVersion      2.3 
GitCommitId                    v6.0.0-alpha.17 
  
  
[WinVM2]: PS C:\Users\PSRemoteUser\Documents>

Problème connu : la commande sudo ne fonctionne pas dans la session à distance sur un ordinateur Linux.

Source : Microsoft

Voir aussi :

Meltdown et Spectre : un outil PowerShell est disponible, il permet de faire l'état des lieux des protections sous Windows
Microsoft annonce la disponibilité générale de PowerShell Core 6.0, la première version de la nouvelle édition multiplateforme de PowerShell
Microsoft annonce la disponibilité de PowerShell Module Browser, une application Web de recherche de cmdlets
Microsoft annonce la disponibilité de la version 1.0 de l'extension PowerShell pour Visual Studio Code sur Windows, macOS et Linux
Symantec annonce une utilisation croissante de scripts PowerShell dans les attaques, plus de 100 familles de menaces analysées utilisaient PowerShell


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de François DORIN François DORIN - Responsable .NET & Magazine https://www.developpez.com
le 29/05/2018 à 10:17
A noter une chose importante. Depuis la mise à jour April Update pour Windows 10 (1803), un client OpenSSH est installé par défaut.

Il est aussi possible d'installer un serveur OpenSSH en se rendant dans les paramètres, applications, ajout de fonctionnalités Windows.
Avatar de Bigbi Bigbi - Candidat au Club https://www.developpez.com
le 05/06/2018 à 10:37
Bonne nouvelle pour les adeptes des deux monde (Linux[Shell] et Windows[Powershell]).
Avatar de 6ratgus 6ratgus - Membre averti https://www.developpez.com
le 05/06/2018 à 14:29
Merci pour ces infos et ce petit tuto d'inter administration entre les OS

j'attendais ces possibilités avec impatience pour notre infrastructure et la sécurisation des connections par clé SSH
ça va me faire avancer sur un vieux projet
Avatar de Bigbi Bigbi - Candidat au Club https://www.developpez.com
le 06/06/2018 à 10:29
Citation Envoyé par 6ratgus Voir le message
Merci pour ces infos et ce petit tuto d'inter administration entre les OS

j'attendais ces possibilités avec impatience pour notre infrastructure et la sécurisation des connections par clé SSH
ça va me faire avancer sur un vieux projet
Bienvenue dans cette nouvelle offre 6ratgus.

 
Contacter le responsable de la rubrique Accueil