Seriál Windows PowerShell: Vzdálený přístup poprvé (část 50.)

Tímto článkem bych chtěl zahájit sérii popisující nastavování a správu vzdáleného přístupu v PowerShellu. Mým cílem bude provést váš všemi možnými scénáři a případnými pastmi.

Nejprve (dnes) se podíváme na ideální situaci, kdy nám pro nastavení stačí opravdu minimum znalostí (spustit PowerShell). Příště si sjednotíme názvosloví, abych se v dalších dílech mohl opět věnovat praktickým ukázkám. Postupně se podíváme na vytváření vlastních endpointů, práci mimo doménu, možnosti konfigurace vzdáleného připojení tak, aby uživatelé mohli provádět pouze určité akce a celou sérii bych rád zakončil ukázkami řešení problémů a nastavením PowerShell Web Access.

Ideální situace – doména

Většina nás bude pracovat v doméně, kde je také nastavení vzdáleného přístupu nejjednodušší. Proto si nastavení ukážeme na tomto příkladu jako první. Máme jeden server jako DC s Windows 2012 Server OS (MTSHOWVMDC) a dva klientské počítače: Windows 7 (MTSHOWVMW7) a Windows 8 (MTSHOWVMW8).

Na DC je remote access nastaven standardně a není tedy potřeba nic nastavovat. Zkusíme se připojit z Win 7 stanice.

PS C:\> Enter-PSSession mtshowvmdc
[mtshowvmdc]: PS C:\Users\moravec\Documents>

Enter-PSSession se používá pro připojení ke vzdálenému počítači (takový PowerShell telnet). Můžete použít i alias etsn. V okamžiku, kdy jsme připojeni, se změní příkazový řádek a jako první část vidíte jméno počítače, na který jste připojeni. Nyní jsou všechny operace prováděny na vzdáleném počítači.

[mtshowvmdc]: PS C:\Users\moravec\Documents> cd\
[mtshowvmdc]: PS C:\> $env:COMPUTERNAME
MTSHOWVMDC
[mtshowvmdc]: PS C:\> exit
PS C:\>

Vzdálené připojení zrušíte pomocí příkazu exit. Jak vidíte v ideálním případě je vzdálený přístup nakonfigurován a vy již nemusíte nic řešit. Pojďme se zkusit připojit na stanici s Windows 7. Připojujeme se z DC.

PS C:\Users\moravec> Enter-PSSession mtshowvmw7

Enter-PSSession : Connecting to remote server mtshowvmw7 failed with the following error message : The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig". For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:1
+ etsn mtshowvmw7
+ ~~~~~~~~~~~~~~~
  + CategoryInfo : InvalidArgument: (mtshowvmw7:String) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId : CreateRemoteRunspaceFailed

Spojení se nepodařilo a v chybovém hlášení je navržen i postup, jak ověřit (zapnout) vzdálený přístup. Přepneme se zpět na Win7.

PS C:\Users\moravec> Test-WSMan

Test-WSMan : The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig".
At line:1 char:11
+ Test-WSMan <<<<
  + CategoryInfo : InvalidOperation: (:) [Test-WSMan], InvalidOperationException
+ FullyQualifiedErrorId : WsManError,Microsoft.WSMan.Management.TestWSManCommand

Co přesně Test-WSMan znamená, si ukážeme v některém z následujících dílů. Nyní vemte na vědomí, že to je jeden z cmdletů, kterým můžete zkontrolovat, že vám na lokálním počítači bude vzdálený přístup fungovat. Doporučení je opět stejné – spustit „winrm quickconfig“. Pokud budete pátrat, přijdete na to, že winrmje VBS soubor (více než 4000 řádek), který nastaví vzdálený přístup. Nevím jak vy, ale já si svou PowerShell konzoli nechci VBS skriptem zašpinit. Proto radši používám cmdlet Enable-PSRemoting. Spustím jej proto z PowerShellu na počítači Win7.

PS C:\Users\moravec> Enable-PSRemoting

Enable-PSRemoting : Access is denied. To run this cmdlet, start Windows PowerShell with the "Run as administrator" option.
At line:1 char:1
+ Enable-PSRemoting
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Enable-PSRemoting], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.EnablePSRemotingCommand

Ah – vzhledem k tomu, že budeme ovlivňovat nastavení systému, je potřeba konzoli spustit jako administrátor. Druhý pokus již bude úspěšnější.

PS C:\> Enable-PSRemoting

WinRM Quick Configuration
Running command "Set-WSManQuickConfig" to enable this machine for remote management through WinRM service.
This includes:
  1. Starting or restarting (if already started) the WinRM service
  2. Setting the WinRM service type to auto start
  3. Creating a listener to accept requests on any IP address
  4. Enabling firewall exception for WS-Management traffic (for http only).

Do you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
WinRM has been updated to receive requests.
WinRM service type changed successfully.
WinRM service started.

WinRM has been updated for remote management.
Created a WinRM listener on https://* to accept WS-Man requests to any IP on this machine.
WinRM firewall exception enabled.

Confirm
Are you sure you want to perform this action?
Performing operation "Registering session configuration" on Target "Session configuration "Microsoft.PowerShell32" is not found. Running command "Register-PSSessionConfiguration Microsoft.PowerShell32 -processorarchitecture x86 -force" to create "Microsoft.PowerShell32" session configuration. This will restart WinRM service.".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
PS C:\>

Jak vidíte, ve skutečnosti se provede několik akcí souvisejících s nastavením vzdáleného přístupu. Které to jsou a v jakém pořadí je vidět ve výpisu.

Nyní můžeme provést opět kontrolu:

PS C:\Users\moravec> Test-WSMan

wsmid : https://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : https://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor : Microsoft Corporation
ProductVersion : OS: 0.0.0 SP: 0.0 Stack: 2.0

A můžeme se připojit z DC, tentokrát úspěšně.

PS C:\Users\moravec> Enter-PSSession mtshowvmw7
[mtshowvmw7]: PS C:\Users\moravec\Documents>

Při všech současných pokusech o připojení jsem používal účet doménového administrátora (moravec). Ne vždy je to ale chtěný stav. Většinou máte operátory, kterým chcete připojení umožnit, ale nechcete, aby zároveň patřili do skupiny Domain Admins. Na závěr si tedy dnes ukážeme, jak nastavit přístup pro neadminy.

Nastavení práv pro vzdálený přístup

Máme vytvořený účet psrausr, který je členem pouze skupiny Domain Users. Zkusíme se s ním připojit na vzdálený počítač.

PS C:\> $env:username
psrausr
PS C:\> Enter-PSSession mtshowvmw7

Enter-PSSession : Connecting to remote server mtshowvmw7 failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:1
+ Enter-PSSession mtshowvmw7
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (mtshowvmw7:String) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId : CreateRemoteRunspaceFailed

Nyní na cílovém počítači přidáme tento účet do skupiny administrators.

PS C:\> net localgroup administrators showdom\psrausr /add
The command completed successfully.

PS C:\> net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain

Members
-------------------------------------------------------------------------------
admin
Administrator
SHOWDOM\Domain Admins
SHOWDOM\psrausr
The command completed successfully.

A nyní se již ze vzdáleného počítače připojíme.

PS C:\> Enter-PSSession mtshowvmw7
[mtshowvmw7]: PS C:\Users\psrausr\Documents> $env:username
psrausr
[mtshowvmw7]: PS C:\Users\psrausr\Documents> $env:computername
MTSHOWVMW7
[mtshowvmw7]: PS C:\Users\psrausr\Documents> exit

Vzhledem k tomu, že skupina administrators má standardně povolen přístup, tato metoda funguje. Odebereme účet:

PS C:\> net localgroup administrators showdom\psrausr /delete
The command completed successfully.

A podíváme se, jak zjistit, kdo se může vlastně na náš počítač připojit. Trošku přeskočím do dalších lekcí a prozradím, že pokud se připojujete na vzdálený počítač, připojujete se na jeden z předdefinovaných vstupních bodů. Jaká je konfigurace toho, který jsme využívali v předchozích příkladech?

PS C:\> Get-PSSessionConfiguration -Name microsoft.powershell | Format-List *

Name : microsoft.powershell
Filename : %windir%\system32\pwrshplugin.dll
SDKVersion : 1
XmlRenderingType : text
lang : en-US
PSVersion : 2.0
ResourceUri : https://schemas.microsoft.com/powershell/microsoft.powershell
SupportsOptions : true
Capability : {Shell}
xmlns : https://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
Uri : https://schemas.microsoft.com/powershell/microsoft.powershell
ExactMatch : true
SecurityDescriptorSddl : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
Permission : BUILTIN\Administrators AccessAllowed

Všimněte si poslední řádky. Na ní je vysvětleno, proč se administrátoři mohou připojit.

Nebojte se, pokud jste poslední ukázky nepochopili. V následujících dílech bude vše podrobně vysvětleno. Dnes bylo důležité ukázat si, že nastavení vzdáleného přístupu v doméně je jednoduché a nic vám nebrání k tomu, abyste jej na vašich počítačích zapnuli.

A ještě jedna poznámka na závěr. ISESteroids v2, o kterých jsem psal minule už je uvolněn, můžete začít zkoušet. Některé věci, které ani v pilotu nebyly, byly přidány navíc. Já jsem zatím nadšen.

David Moravec, MVP
Mainstream Technologies