Code PowerShell : [-HostName <string>] [-UserName <string>] [-KeyFilePath <string>
Vous pouvez maintenant utiliser Linux pour administrer à distance des machines Windows
Avec un accès distant PowerShell via SSH
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.
Code PowerShell : [-HostName <string>] [-UserName <string>] [-KeyFilePath <string>
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>]
Installez la dernière version de OpenSSH Win32 depuis GitHub en utilisant les instructions d’installation
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
Redémarrez le service sshd : Restart-Service sshd
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)
Installez la dernière version PowerShell pour Linux à partir de GitHub
Installez Ubuntu SSH si nécessaire Code bash : Sélectionner tout 1 2 sudo apt install openssh-client sudo apt install openssh-server
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
Redémarrez le service sshd Code bash : Sélectionner tout sudo service sshd restart
Configuration sur un ordinateur MacOS
Installez la dernière version de PowerShell pour MacOS
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
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
Redémarrez le service sshd Code bash : 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 :
1 # 2 # Linux to Linux 3 # 4 PS /home/TestUser> $session = New-PSSession -HostName UbuntuVM1 -UserName TestUser 5 The authenticity of host 'UbuntuVM1 (9.129.17.107)' cannot be established. 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.