Con la versione 6 di PowerShell, Microsoft ha introdotto PowerShell Remoting su SSH, che permette un vero remoting PowerShell multipiattaforma tra Linux, macOS e Windows. PowerShell SSH Remoting crea un processo host PowerShell sulla macchina di destinazione come sottosistema SSH. Normalmente, PowerShell remoting usa WinRM per la negoziazione della connessione e il trasporto dei dati, tuttavia WinRM è disponibile solo su macchine basate su Windows.
Ci sono anche alcuni lati negativi. Il remoting basato su SSH attualmente non supporta la configurazione dell’endpoint remoto e JEA (Just Enough Administration). È anche importante capire che questo non è solo un altro client SSH di PowerShell.
Utilizzare il trasporto SSH con PowerShell Remoting
Per usare PowerShell remoting con SSH puoi usare le stesse cmdlets, che conosci da PowerShell remoting con WinRM.
- New-PSSession
- Enter-PSSession
- Invoke-Command
Ci sono 3 nuovi parametri per queste cmdlets, se stai usando PowerShell SSH remoting.
- -HostName (Invece di -Computername, definite la destinazione SSH)
- -UserName (invece di -Credentials usate il parametro -UserName)
- -KeyFilePath (se state usando l’autenticazione con chiave SSH potete usare il parametro -KeyFilePath per puntare al file delle chiavi)
New-PSSession -HostName tomsssh.server.com -UserName thomas
Setup PowerShell SSH Remoting
Per lavorare con PowerShell SSH, è necessario completare i seguenti passi su tutti i sistemi e le macchine.
- Installare OpenSSH Server e Client
- OpenSSH per Windows è disponibile direttamente in Windows 10 (1809) e Windows Server 2019 come funzionalità opzionale.
- Su Linux si installa OpenSSH a seconda della piattaforma
- Installa PowerShell 6 su tutti i sistemi
- Configura il sottosistema SSH per ospitare un processo PowerShell sulla macchina remota
- Configura l’autenticazione basata su password o chiave
Step by step setup SSH remoting su Windows
Step 1: Per prima cosa è necessario installare PowerShell 6 su Windows. Puoi seguire il mio post sul blog per installare facilmente PowerShell 6.
Step 2: Installa OpenSSH Client e Open SSH Server. Per installare client e server e configurare inizialmente il server OpenSSH, puoi usare il seguente comando.
# 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
Step 2.1: Poiché attualmente c’è un bug in OpenSSH per Windows, il percorso non accetta spazi. È necessario creare un collegamento simbolico a una directory senza spazi. Esegui il seguente comando sul sistema di destinazione.
mklink /D c:\pwsh "C:\Program Files\PowerShell"
Step 3: Configura e modifica il file sshd_config situato in $env:ProgramData\ssh sulla macchina di destinazione.
Controlla che l’autenticazione con password sia abilitata
PasswordAuthentication yes
Aggiungi il sottosistema per PowerShell
Subsystem powershell c:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile
Opzionale abilita l’autenticazione a chiave
PubkeyAuthentication yes
Se sei interessato a configurare l’autenticazione a chiave con OpenSSH su Windows Server, controlla il post sul blog ITOpstalk.com di Orin Thomas (Microsoft Cloud Advocate).
Passo 4: Riavviare il servizio sshd
Restart-Service sshd
Step by step Setup SSH remoting on Linux (Ubuntu 18.04)
Passo 1: Per prima cosa è necessario installare PowerShell 6 su Linux. Puoi seguire il mio post sul blog per installare facilmente PowerShell 6.
Step 2: Installare OpenSSH Client e Open SSH Server. Per installare client e server e configurare inizialmente il server OpenSSH, puoi usare i seguenti comandi.
sudo apt install openssh-clientsudo apt install openssh-server
Step 3: Configura e modifica il file sshd_config nella posizione /etc/ssh sulla macchina di destinazione.
Controlla che l’autenticazione con password sia abilitata
PasswordAuthentication yes
Aggiungi il sottosistema per PowerShell
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile
Opzionale abilita l’autenticazione con chiave
PubkeyAuthentication yes
Step 4: Riavvia il servizio sshd
sudo service sshd restart
Remoto SSH con PowerShell 6
Ora puoi iniziare ad usare PowerShell SSH remoting per connetterti anche da diversi sistemi operativi come Windows a Linux o Linux a Windows.
Come detto prima, puoi usare gli stessi comandi che ti sono familiari come New-PSSession, Enter-PSSession o Invoke-Command.
Come client puoi anche usare Azure Cloud Shell, che esegue PowerShell 6
Ovviamente, puoi anche usare PowerShell SSH remoting per collegarti da Linux a Linux e da Windows a Windows. Puoi trovare maggiori informazioni su PowerShell SSH remoting sulle pagine di Microsoft Docs. Se avete domande, fatemelo sapere nei commenti.
Tag: Microsoft, PowerShell, PowerShell 6, PowerShell Core, PowerShell su SSH, Powershell Remoting, setup, Setup SSH PowerShell, SSH, SSH PowerShell, SSH Transport Ultima modifica: 4 aprile 2019