From 49716cd36adb727b50886ad5c947f918d43f4419 Mon Sep 17 00:00:00 2001 From: leovms Date: Thu, 30 Nov 2017 11:55:44 -0500 Subject: [PATCH] Adding artifact to configure WinRM (#317) * Adding artifact to configure WinRM. * Updating description to include information about Shared IP address vs Public IP address. --- Artifacts/windows-winrm/artifactfile.json | 21 +++ Artifacts/windows-winrm/config-winrm.ps1 | 170 ++++++++++++++++++++++ Artifacts/windows-winrm/makecert.exe | Bin 0 -> 55632 bytes 3 files changed, 191 insertions(+) create mode 100644 Artifacts/windows-winrm/artifactfile.json create mode 100644 Artifacts/windows-winrm/config-winrm.ps1 create mode 100644 Artifacts/windows-winrm/makecert.exe diff --git a/Artifacts/windows-winrm/artifactfile.json b/Artifacts/windows-winrm/artifactfile.json new file mode 100644 index 000000000..aa141cd65 --- /dev/null +++ b/Artifacts/windows-winrm/artifactfile.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://raw.githubusercontent.com/Azure/azure-devtestlab/master/schemas/2016-11-28/dtlArtifacts.json", + "title": "Configure WinRM", + "publisher": "Microsoft", + "description": "Configures WinRM on the virtual machine. If using \"Shared IP address\" for your Lab VM, you will need to also add a NAT rule on the Load Balancer to allow traffic through. Alternatively, use \"Public IP address\" instead.", + "tags": [ + "Windows" + ], + "iconUri": "https://i.microsoft.com/global/ImageStore/PublishingImages/logos/56x56/windows_symbol_clr_56x56.png", + "targetOsType": "Windows", + "parameters": { + "hostName": { + "type": "string", + "displayName": "Host Name", + "description": "Specifies the FQDN of the machine or domain." + } + }, + "runCommand": { + "commandToExecute": "[concat('powershell.exe -ExecutionPolicy bypass \"& ./config-winrm.ps1 -HostName ''', parameters('hostName'), '''\"')]" + } +} \ No newline at end of file diff --git a/Artifacts/windows-winrm/config-winrm.ps1 b/Artifacts/windows-winrm/config-winrm.ps1 new file mode 100644 index 000000000..1328582c6 --- /dev/null +++ b/Artifacts/windows-winrm/config-winrm.ps1 @@ -0,0 +1,170 @@ +[CmdletBinding()] +param +( + [Parameter(Mandatory = $true)] + [string] $HostName +) + +################################################################################################### +# +# PowerShell configurations +# + +# NOTE: Because the $ErrorActionPreference is "Stop", this script will stop on first failure. +# This is necessary to ensure we capture errors inside the try-catch-finally block. +$ErrorActionPreference = "Stop" + +# Ensure we set the working directory to that of the script. +Push-Location $PSScriptRoot + +################################################################################################### +# +# Handle all errors in this script. +# + +trap +{ + # NOTE: This trap will handle all errors. There should be no need to use a catch below in this + # script, unless you want to ignore a specific error. + $message = $error[0].Exception.Message + if ($message) + { + Write-Host -Object "ERROR: $message" -ForegroundColor Red + } + + # IMPORTANT NOTE: Throwing a terminating error (using $ErrorActionPreference = "Stop") still + # returns exit code zero from the PowerShell script when using -File. The workaround is to + # NOT use -File when calling this script and leverage the try-catch-finally block and return + # a non-zero exit code from the catch block. + exit -1 +} + +################################################################################################### +# +# Functions used in this script. +# + +function Handle-LastExitCode +{ + [CmdletBinding()] + param( + ) + + if ($LASTEXITCODE -ne 0) + { + throw 'The artifact failed to apply.' + } +} + +function New-Certificate +{ + [CmdletBinding()] + param( + [string] $HostName + ) + + # makecert ocassionally produces negative serial numbers, which golang tls/crypto < 1.6.1 cannot handle. + # https://github.com/golang/go/issues/8265 + $serial = Get-Random + .\makecert -r -pe -n CN=$HostName -b 01/01/2012 -e 01/01/2022 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -# $serial 2>&1 | Out-Null + + $thumbprint=(Get-ChildItem cert:\Localmachine\my | Where-Object { $_.Subject -eq "CN=" + $HostName } | Select-Object -Last 1).Thumbprint + + if(-not $thumbprint) + { + throw 'Failed to create the test certificate.' + } + + return $thumbprint +} + +function Remove-WinRMListener +{ + [CmdletBinding()] + param( + ) + + try + { + $config = Winrm enumerate winrm/config/listener + foreach($conf in $config) + { + if($conf.Contains('HTTPS')) + { + Write-Output 'HTTPS is already configured. Deleting the exisiting configuration.' + winrm delete winrm/config/Listener?Address=*+Transport=HTTPS 2>&1 | Out-Null + break + } + } + } + catch + { + Write-Output "INFO: Exception while deleting the listener: $($_.Exception.Message)" + } +} + +function Set-WinRMListener +{ + [CmdletBinding()] + param( + [string] $HostName) + + # Delete the WinRM Https listener, if it is already configured. + Remove-WinRMListener + + # Create a test certificate. + $cert = (Get-ChildItem cert:\LocalMachine\My | Where-Object { $_.Subject -eq "CN=" + $HostName } | Select-Object -Last 1) + $thumbprint = $cert.Thumbprint + if(-not $thumbprint) + { + $thumbprint = New-Certificate -HostName $HostName + } + elseif (-not $cert.PrivateKey) + { + # The private key is missing - could have been sysprepped. Delete the certificate. + Remove-Item Cert:\LocalMachine\My\$thumbprint -Force | Out-Null + $thumbprint = New-Certificate -HostName $HostName + } + + $WinrmCreate = "winrm create --% winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=`"$HostName`";CertificateThumbprint=`"$thumbPrint`"}" + invoke-expression $WinrmCreate + Handle-LastExitCode + + winrm set winrm/config/service/auth '@{Basic="true"}' + Handle-LastExitCode +} + +function Add-FirewallException +{ + [CmdletBinding()] + param( + [string] $Port + ) + + # Delete an exisitng rule + netsh advfirewall firewall delete rule name="Windows Remote Management (HTTPS-In)" dir=in protocol=TCP localport=$Port | Out-Null + Handle-LastExitCode + + # Add a new firewall rule + netsh advfirewall firewall add rule name="Windows Remote Management (HTTPS-In)" dir=in action=allow protocol=TCP localport=$Port | Out-Null + Handle-LastExitCode +} + +try { + Write-Output 'Add firewall exception for port 5986.' + Add-FirewallException -Port 5986 + + # The default MaxEnvelopeSizekb on Windows Server is 500 Kb which is very less. It needs to be at 8192 Kb. + # The small envelop size, if not changed, results in the WS-Management service responding with an error that + # the request size exceeded the configured MaxEnvelopeSize quota. + Write-Output 'Configuring MaxEnvelopeSize to 8192 kb.' + winrm set winrm/config '@{MaxEnvelopeSizekb = "8192"}' + + Write-Output 'Configuring WinRM listener.' + Set-WinRMListener -HostName $HostName + + Write-Output 'Artifact completed successfully.' +} +finally { + Pop-Location +} \ No newline at end of file diff --git a/Artifacts/windows-winrm/makecert.exe b/Artifacts/windows-winrm/makecert.exe new file mode 100644 index 0000000000000000000000000000000000000000..55ffee805f9e3a4bc61d08181534ac98aaa8e09e GIT binary patch literal 55632 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