W wersji 6 PowerShell, Microsoft wprowadził PowerShell Remoting over SSH, który pozwala na prawdziwe wieloplatformowe remoting PowerShell między Linux, macOS i Windows. PowerShell SSH Remoting tworzy proces hosta PowerShell na maszynie docelowej jako podsystem SSH. Zwykle remoting PowerShell używa WinRM do negocjacji połączenia i transportu danych, jednak WinRM jest dostępny tylko na maszynach z systemem Windows.
Są też pewne minusy tego rozwiązania. Remoting oparty na SSH nie wspiera obecnie zdalnej konfiguracji punktów końcowych i JEA (Just Enough Administration). Ważne jest również, aby zrozumieć, że nie jest to tylko kolejny klient PowerShell SSH.
Użyj transportu SSH z PowerShell Remoting
Aby użyć PowerShell remoting z SSH możesz użyć tych samych cmdletów, które znasz z PowerShell remoting z WinRM.
- New-PSSession
- Enter-PSSession
- Invoke-Command
Dla tych cmdletów są 3 nowe parametry, jeśli używasz remotingu PowerShell SSH.
- -HostName (Zamiast -Computername, określasz docelowy SSH)
- -UserName (Zamiast -Credentials używasz parametru -UserName)
- -KeyFilePath (Jeśli używasz uwierzytelniania kluczy SSH, możesz użyć parametru -Credentials, aby wskazać ścieżkę dostępu do kluczy SSH).KeyFilePath do wskazania pliku klucza)
New-PSSession -HostName tomsssh.server.com -UserName thomas
Setup PowerShell SSH Remoting
Aby pracować z PowerShell SSH, należy wykonać następujące czynności na wszystkich systemach i maszynach.
- Instalacja OpenSSH Server and Client
- OpenSSH for Windows jest dostępny bezpośrednio w Windows 10 (1809) i Windows Server 2019 jako funkcja opcjonalna.
- Na Linuksie instalujesz OpenSSH w zależności od platformy
- Zainstaluj PowerShell 6 na wszystkich systemach
- Skonfiguruj podsystem SSH, aby hostować proces PowerShell na zdalnej maszynie
- Skonfiguruj uwierzytelnianie oparte na haśle lub kluczu
Krok po kroku konfiguracja zdalnego sterowania SSH w systemie Windows
Krok 1: Najpierw musisz zainstalować PowerShell 6 w systemie Windows. Możesz skorzystać z mojego wpisu na blogu, aby łatwo zainstalować PowerShell 6.
Krok 2: Zainstaluj klienta OpenSSH i serwer Open SSH. Aby zainstalować klienta i serwer oraz wstępnie skonfigurować serwer OpenSSH, można użyć następującego polecenia.
# Install the OpenSSH Client and Server Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 # Initial Configuration of SSH Server Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic' # Confirm the Firewall rule is configured. It should be created automatically by setup. Get-NetFirewallRule -Name *ssh* # There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled
Krok 2.1: Ponieważ w OpenSSH dla Windows jest obecnie błąd, ścieżka nie akceptuje spacji. Musisz utworzyć symlink do katalogu bez spacji. Uruchom następujące polecenie w systemie docelowym.
mklink /D c:\pwsh "C:\Program Files\PowerShell"
Krok 3: Skonfiguruj i edytuj plik sshd_config znajdujący się w katalogu $env:ProgramData na maszynie docelowej.
Sprawdź, czy uwierzytelnianie za pomocą hasła jest włączone
PasswordAuthentication yes
Dodaj podsystem dla PowerShell
Subsystem powershell c:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile
Opcjonalnie włącz uwierzytelnianie za pomocą klucza
PubkeyAuthentication yes
Jeśli jesteś zainteresowany konfiguracją uwierzytelniania za pomocą klucza z OpenSSH na Windows Server, sprawdź wpis na blogu ITOpstalk.com autorstwa Orina Thomasa (Microsoft Cloud Advocate).
Krok 4: Ponowne uruchomienie usługi sshd
Restart-Service sshd
Krok po kroku Konfiguracja remotingu SSH w systemie Linux (Ubuntu 18.04)
Krok 1: Najpierw musisz zainstalować PowerShell 6 na Linuksie. Możesz śledzić mój wpis na blogu, aby łatwo zainstalować PowerShell 6.
Krok 2: Zainstaluj klienta OpenSSH i serwer SSH. Aby zainstalować klienta i serwer oraz wstępnie skonfigurować serwer OpenSSH, możesz użyć następujących poleceń.
sudo apt install openssh-clientsudo apt install openssh-server
Krok 3: Konfiguracja i edycja pliku sshd_config w lokalizacji /etc/ssh na maszynie docelowej.
Sprawdź, czy uwierzytelnianie hasłem jest włączone
PasswordAuthentication yes
Dodaj podsystem dla PowerShell
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile
Opcjonalnie włącz uwierzytelnianie kluczem
PubkeyAuthentication yes
Krok 4: Uruchom ponownie usługę sshd
sudo service sshd restart
SSH Remoting with PowerShell 6
Teraz możesz zacząć używać remotingu PowerShell SSH do łączenia się nawet z różnych systemów operacyjnych, takich jak Windows do Linuksa lub Linux do Windows.
Jak wspomniano wcześniej, możesz użyć tych samych poleceń, które znasz, takich jak New-PSSession, Enter-PSSession lub Invoke-Command.
Jako klient możesz również użyć Azure Cloud Shell, który działa w PowerShell 6
Oczywiście, możesz również użyć PowerShell SSH remoting, aby połączyć się z Linux do Linux i Windows do Windows. Więcej informacji na temat zdalnego sterowania PowerShell SSH można znaleźć na stronach Microsoft Docs. Jeśli masz jakieś pytania, daj mi znać w komentarzach.
Tagi: Microsoft, PowerShell, PowerShell, PowerShell 6, PowerShell Core, PowerShell over SSH, Powershell Remoting, setup, Setup SSH PowerShell, SSH, SSH PowerShell, SSH Transport Ostatnio zmodyfikowano: Kwiecień 4, 2019