Inhalt

PowerShell Core Remoting mit Ubuntu und Windows

Mit PowerShell Core greift Microsoft um sich. Das hat zum Einen damit zu tun, dass die PowerShell Core als Open Source Projekt auf GitHub gehostet und gepflegt wird. Zum Anderen läuft die Version 6 der PowerShell neben Windows auch auf Linux und MacOS.

Das Ziel ist klar definiert.

Die PowerShell bringt eine Funktion schon sehr lange mit und in Windows 2012 wurde es zum Standard. PowerShell Remoting. Das Verbinden auf einen anderen Server. Mit der PowerShell wird dies nun auch Betriebsystem übergreifen möglich!

Realisiert wird dies durch den Ersatz von WSMan/WinRM als Basis durch SSH. Die technischen Details werden in diesem Ignite Vortrag besprochen.

https://youtu.be/oOiwcN6DAwQ?t=2978

Umgebung

Meine Umgebung besteht aus folgenden Komponenten

  • Windows 10 (10.0.16299.0)
  • Ubuntu Server 16.04.3 mit konfiguriertem OpenSSH

Vorbereitungen

Ubuntu

PowerShell Core

PowerShell Core kann direkt aus dem Microsoft Repository installiert werden.

/powershell-core-remoting-mit-ubuntu-und-windows/images/install_pwsh_core_ubuntu.gif

# curl installieren
sudo apt-get install curl
# Das Microsoft repo samt Schlüssel hinzufügen
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list
# Die Paketliste aktualisieren
sudo apt-get update
# PowerShell Core installieren
sudo apt-get install -y powershell

sshd

Nun muss die sshd_config noch vorbereitet werden um die PowerShell nativ anzusprechen. In der Datei /etc/sshd/ssd_config müssen folgende Optionen eingestellt werden.

# Password und Key Authentifizierung aktivieren PasswordAuthentication yes PubkeyAuthentication yes

PowerShell Core als Subsystem registrieren

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile

Anschließend muss nur noch der sshd Service neu gestartet werden.

sudo service sshd restart

/powershell-core-remoting-mit-ubuntu-und-windows/images/configure_sshd_pwsh_core_ubuntu.gif

Windows

PowerShell Core

Für die Nutzung von PSRemoting über SSH muss unbedingt eine aktuelle Version der PowerShell Core installiert werden. Die normale PowerShell auf Windows 10 unterstützt nicht alle notwendigen Funktionen. Die Aktuellste kann von der PowerShell GitHub Seite als msi oder zip geladen werden. In diesem Artikel habe ich die msi installiert.

[caption id=“attachment_241” align=“alignnone” width=“300”]/powershell-core-remoting-mit-ubuntu-und-windows/images/2017-11-07-20_33_45-C__Program-Files_PowerShell_6.0.0-beta.9_pwsh.exe_-300x176.png Powershell Core 6.0.0-beta.9[/caption]

OpenSSH

Anschließend muss OpenSSH for Windows installiert werden.

Dazu lade ich die zip Datei herunter und entpacke Sie in einem Ordner in meinem Profil. Diesen füge ich an die ‘Path’ Variable an.

cd ~
mkdir sshd
# Download von OpenSSH for Windows
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v0.0.22.0/OpenSSH-Win64.zip -OutFile "$PWD\sshd\OpenSSH-Win64.zip"
# Entpacken der Daten
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
[System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD\sshd\OpenSSH-Win64.zip","$PWD\sshd")
dir .\sshd\OpenSSH-Win64\
# Anpassen der 'Path' Variable
$env:Path="$PWD\sshd\OpenSSH-Win64\;"+$env:Path

Enter-PSSession

Hier ist der “große” Unterschied zwischen einer Verbindung über WinRM. Es wird nicht -ComputerName sondern -Hostname verwendet! Das wird sich laut Microsoft sicherlich ändern, ist in der aktuellen Version aber notwendig.

PS > Enter-PSSession -HostName ubuntupwsh.dev.toolsection.info -UserName fabian

/powershell-core-remoting-mit-ubuntu-und-windows/images/connect_pwsh_over_ssh.gif