Se connecter à un serveur Windows 2022 Core

Introduction

Comment travailler sur un serveur Core depuis un poste client, sans une interface de plateforme cloud et en sachant que ce poste client n'est pas dans un domaine (et que le serveur n'est pas un contrôleur).

Plusieurs façons de faire à ma connaissance (je rappelle que je ne suis pas un expert Windows du tout, même si j'adore rigoler avec PowerShell).

Nous allons essayer la 3)... vous allez voir, c'est pas triste du tout :-D...


Récapitulatif de ce qu'il conviendrait de faire en situation réelle

Pour résumer ce qu'il conviendrait normalement de faire en situation réelle si vraiment on tenait à se servir de WinRM (ce qui n'est clairement pas la meilleure des idées...), voici un récapitulatif :

I - Sur le serveur Core (Cible de la Connexion) :

Set-PSSessionConfiguration -Name 'Microsoft.PowerShell' -ShowSecurityDescriptorUI

II - Sur le client (Initiateur de la Connexion) :


Ce que nous allons faire

Ce que nous allons faire à présent est légèrement différent, puisque nous n'allons pas demander de faire certifier notre requête SSL auprès d'une autorité reconnue juste pour faire un test. Nous allons donc générer un certificat auto-signé sur le serveur Core et l'utiliser. La différence avec les étapes ci-dessous, c'est qu'il faudra également intégrer ce certificat au client.
Enfin, nous ne créerons pas l'utilisateur spécifique ni le groupe, nous allons rester très basique. L'idée ici, c'est juste de comprendre la mécanique et de voir comment on peut procéder au transfert de données entre les 2 protagonistes (du client au serveur core) de cette façon. Bien entendu, on peut aussi utiliser robocopy par ce biais.


SUR LE SERVEUR CORE :

1) Créer un certificat auto-signé

(ou importez-en un signé si vous êtes dans ce contexte car ça évitera de devoir ajouter le certificat au magasin du client comme on le fera après).

D'abord, récupérer le nom de votre serveur :

$env:COMPUTERNAME

(on va prendre 'WIN-KAUMG9A63UJ' pour l'exemple)

New-SelfSignedCertificate -DnsName 'WIN-KAUMG9A63UJ' -CertStoreLocation 'Cert:\LocalMachine\My'

(L'empreinte thumbprint et le CN du serveur vont s'afficher.. Pratique, on pourra les copier/coller dans les commandes suivantes)

2) Intégrer le certificat à WinRM :

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname='WIN-KAUMG9A63UJ'; CertificateThumbprint='9E095CBCCF54FCC93024ACB6725DB89D4819E334'}'

(il est preferrable de restreindre la surface de connexion au serveur à la seule adresse IP de votre client plutôt que d'ouvrir à tout le monde. Pour cela, nous allons écrire une règle de pare-feu pour restreindre à une seule adresse IP : 192.168.1.105 par exemple)

Voici le résultat qui confirme que cela a fonctionné :

ResourceCreated

Address = http://shcemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous

ReferenceParameters

ResourceURI = http://schemas.microsoft.com/wbem/wsman/1/config/listener

SelectorSet

Selector: Address = *, Transport = HTTPS

3) Créer la règle de pare-feu restreinte à l'IP de notre client.

New-NetFirewallRule -Name 'WinRM HTTPS' -DisplayName 'WinRM HTTPS' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 5986 -RemoteAddress 192.168.1.105

SUR LE PC CLIENT DISTANT

Ouvrir PowerShell en mode Administrateur

1) Rajouter une correpondance entre l'IP du serveur et son nom d'hôte dans le fichier hosts.

Add-Content -Path 'C:\Windows\System32\drivers\etc\hosts' -Value '`n192.168.1.44`tWIN-KAUMG9A63UJ'

(remplacez 192.168.1.44 et WIN-KAUMG9A63UJ par l'IP et le nom d'hôte du serveur, mais ne touchez pas à `n et `t)

2) Créez un dossier C:\TEMP (ce sera utile pour plus tard)

New-Item -Path 'C:\TEMP' -ItemType Directory

3) Connectez-vous au serveur depuis votre client :

Enter-PSSession -ComputerName 'WIN-KAUMG9A63UJ' -UseSSL -Credential (Get-Credential) -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)

Vous devrez entrer l'identifiant/mot de passe d'un utilisateur du serveur autorisé à être contacté à distance et vous devez absolument placer les -SessionOption qui ne vérifient pas le certificat..
Autrement la connexion vous est refusée (pour l'instant, nous allons changer cela)

4) Une fois connecté au serveur depuis notre client, il nous faut exporter le certificat auto-signé du serveur

New-Item -Path 'C:\TEMP' -ItemType Directory

$CertPath = 'Cert:\LocalMachine\My'

$Cert = Get-ChildItem -Path $CertPath | Where-Object {$_.Subject -like '*CN=WIN-KAUMG9A63UJ*'}

Export-Certificate -Cert $Cert -FilePath C:\TEMP\server_certificate.cer

5) Déconnectez-vous du serveur :

exit

6) Transférer le certificat du serveur sur le client :

$Session = New-PSSession -ComputerName 'WIN-KAUMG9A63UJ' -Credential (Get-Credential) -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)

Copy-Item -Path 'C:\TEMP\server_certificate.cer' -Destination 'C:\TEMP\server_certificate.cer' -FromSession $Session

7) Importer le certificat du serveur reçu dans le magasin de certificats du système du client.

Import-Certificate -FilePath 'C:\TEMP\server_certificate.cer' -CertStoreLocation Cert:\LocalMachine\Root

8) Voilà. Vous pouvez désormais vous connecter sans les options -SessionOption.

Enter-PSSession -ComputerName 'WIN-KAUMG9A63UJ' -UseSSL -Credential (Get-Credential)

Envoyer des données (dossiers/fichiers) du poste client au serveur core

(Je veux envoyer le dossier ISO qui se trouve sur le poste client de Marcel vers le serveur Windows Core, dans le dossier C:\TEMP)

$session = New-PSSession -ComputerName 'WIN-KAUMG9A63UJ' -UseSSL -Credential (Get-Credential)

Copy-Item -Path 'C:\Users\Marcel\Documents\VM\ISO' -Destination 'C:\TEMP' -ToSession $session -Recurse

Récupérer des données du serveur Windows depuis le poste client

(vous avez l'exemple du certificat dans la procédure au-dessus, je la remets ici)

$Session = New-PSSession -ComputerName 'WIN-KAUMG9A63UJ' -Credential (Get-Credential) -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)

Copy-Item -Path 'C:\TEMP\server_certificate.cer' -Destination 'C:\TEMP\server_certificate.cer' -FromSession $Session

Articles connexes

Previous Article

Next Article


⬆️ Retour en haut de la page