K/Ubuntu 20.04 Howto fix Powershell 7.1 PSSession

Auf der Microsoft Doc Webseite wird man schnell fündig wie man unter Ubuntu 20.04 die aktuelle Powershell installiert. Anbei der Link Powershell under Linux.

cd Downloads/
sudo apt update
sudo apt install -y wget apt-transport-https software-properties-common
wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo add-apt-repository universe
sudo apt-get install -y powershell
pwsh
PowerShell 7.1.0
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
PS /home/k3ops/Downloads>

Enter-PSSession

Powershell installiert und gestartet, versucht man eine Remoteverbindung über die Powershell mit z.B. Enter-PSSession herzustellen, hagelt es gleich einmal den folgenden Fehler.

PS /home/k3ops/Downloads> Enter-PSSession -ComputerName ipadresse
Enter-PSSession: This parameter set requires WSMan, and no supported
WSMan client library was found. WSMan is either not installed or
unavailable for this system.

Howto Fix

Exit und zurück zur Bash um mittels ldd die Abhängigkeiten zu prüfen.

ldd /opt/microsoft/powershell/7/libmi.so
   linux-vdso.so.1 (0x00007fff9617c000)
   libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2a180a2000)
   libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2a1809c000)
   libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007f2a1808a000)
   libssl.so.1.0.0 => not found
   libcrypto.so.1.0.0 => not found
   libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2a17e98000)
   /lib64/ld-linux-x86-64.so.2 (0x00007f2a182ad000)
   libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007f2a17e6a000)
   libcap-ng.so.0 => /lib/x86_64-linux-gnu/libcap-ng.so.0 (0x00007f2a17e62000)

Libssl.so.1.0.0 und libcrypto werden nicht gefunden, um sich das genauer anzuschauen installieren wir schnell noch mlocate und lassen uns mit locate den Ort anzeigen wo sich die libssl.so.1.0.0 befindet.

sudo apt install mlocate
sudo updatedb
locate libssl.so.1.0.0
 /opt/microsoft/powershell/7/libssl.so.1.0.0
 /snap/core18/1880/usr/lib/x86_64-linux-gnu/libssl.so.1.0.0

Unter /opt/microsoft/powershell wird uns eine libssl.so.1.0.0 angezeigt, jedoch wenn man dies weiter prüft sieht man das dies nur ein Softlink ist der auf eine libssl.so.10 zeigt die garnicht vorhanden ist ! Es ist auch keine libssl unter einem frischen Ubuntu 20.04 installiert und anscheinend wird die Abhängigkeit auch garnicht mitinstalliert, obwohl das Powershell-Paket über die Repos installiert wurde.

Installieren der libssl.so und der libcrypto.so

sudo apt install libssl-dev
sudo apt list --installed | grep libssl*
 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
 libss2/focal,now 1.45.5-2ubuntu1 amd64  [Installiert,automatisch]
 libssh-4/focal-updates,focal-security,now 0.9.3-2ubuntu2.1 amd64  [Installiert,automatisch]
 libssh-gcrypt-4/focal-updates,focal-security,now 0.9.3-2ubuntu2.1 amd64  [Installiert,automatisch]
 libssl-dev/focal-updates,focal-security,now 1.1.1f-1ubuntu2.1 amd64  [installiert]
 libssl1.1/focal-updates,focal-security,now 1.1.1f-1ubuntu2.1 amd64  [Installiert,automatisch]
locate libssl.so.1.1
 /snap/core18/1880/usr/lib/x86_64-linux-gnu/libssl.so.1.1
 /snap/gnome-3-34-1804/36/usr/lib/x86_64-linux-gnu/libssl.so.1.1
 /usr/lib/x86_64-linux-gnu/libssl.so.1.1

K/Ubuntu 20.04 installiert die Version libssl.so.1.1 und zu finden ist die unter /usr/lib/x86_64-linux-gnu/. Nun setzt man einfach die entsprechenden Softlinks in das Verzeichnis wo ldd ein paar Schritte weiter oben die Datei sucht, nämlich unter /lib/x86_64-linux-gnu. Achtung wir setzen die Softlinks auf den Namen der gesuchten library also nicht XXX.so.1.1 sondern auf XXX.so.1.0.0.

Softlinks erstellen

sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /lib/x86_64-linux-gnu/libssl.so.1.0.0
sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

ldd /opt/microsoft/powershell/7/libmi.so
   linux-vdso.so.1 (0x00007ffe02b7c000)
   libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe1090c7000)
   libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe1090c1000)
   libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fe1090af000)
   libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fe10901c000)
   libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fe108d46000)
   libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe108b54000)
   /lib64/ld-linux-x86-64.so.2 (0x00007fe1092d2000)
   libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fe108b26000)
   libcap-ng.so.0 => /lib/x86_64-linux-gnu/libcap-ng.so.0 (0x00007fe108b1e000)

Installieren GSS-NTLMSSP

Nachdem ldd alle Librarys findet tritt ein weitere Fehler bei dem Enter-PSSession Befehl auf.

Hier muss gss-ntlmssp noch installiert werden.

apt install gss-ntlmssp

Enter-PSSession

Jetzt kann man sich wieder Remote mit der Powershell eines Windows Gerätes verbinden wenn die Verbindung in der Windows-Firewall freigegeben wurde. Zu beachten ist das „-Authentication negotiate“ verwendet wird.

k3ops@kubuntu-vm:~$ pwsh
 PowerShell 7.1.0
 Copyright (c) Microsoft Corporation.
 https://aka.ms/powershell
 Type 'help' to get help.
 PS /home/k3ops> Enter-PSSession -ComputerName 10.10.2.10 -Credential $u -Authentication negotiate
 PowerShell credential request
 Enter your credentials.
 User: DOMAIN\username
 Password for user DOMAIN\username: XXXXXX 
 [XXX.XXX.XXX.XXX]: PS C:\Users\k3ops\Documents> cd ..
 [XXX.XXX.XXX.XXX]: PS C:\Users\k3ops> cd ..
 [XXX.XXX.XXX.XXX]: PS C:\Users> cd ..
 [XXX.XXX.XXX.XXX]: PS C:> ls
 Verzeichnis: C:\
 Mode                LastWriteTime         Length Name                                                                                  
 ----                -------------         ------ ----                                                                                  
 d-----       01.08.2019     15:49                Intel                                                                                 
 d-----       12.09.2016     13:35                Logs                                                                                  
 d-----       01.08.2019     16:59                OEM                                                                                   
 d-----       02.08.2019     11:53                PerfLogs                                                                              
 da----       05.04.2020     16:23                PostInstall                                                                           
 d-r---       28.02.2020     11:12                Program Files                                                                         
 d-----       31.08.2020     10:21                Program Files (x86)                                                                   
 d-----       10.12.2020     23:58                tmp                                                                                   
 d-r---       16.12.2020     14:12                Users                                                                                 
 d-----       16.12.2020     11:49                Windows                                                                               
 d-----       14.08.2019     10:56                _Scripts                                                                              
 -a----       12.02.2020     12:11           1024 .rnd                                                                                  
 -a----       19.11.2020     15:14             25 log.txt                                                                               
 -a----       01.08.2019     16:59              0 SVIMSP_OLD
[XXX.XXX.XXX.XXX]: PS C:>