C’era una volta, eri limitato nel tipo di computer a cui potevi connetterti con Windows PowerShell usando PowerShell Remoting. Poiché PowerShell Remoting supportava solo il provider WsMan, le tue possibilità di connessione a computer con Linux, ad esempio, erano nulle. Tuttavia, nel 2015, Microsoft ha introdotto il supporto per SSH in Windows portando avanti un sacco di potenziale e finalmente consentendoti di utilizzare SSH e PowerShell insieme.
In questo articolo, esamineremo come configurare il client SSH di Windows e come puoi sfruttare SSH e PowerShell Remoting.
Questo post su SSH e PowerShell fa parte della serie di blog #PS7Now. Assicurati di controllare tutti gli altri contributori in questa serie in fondo a questo post.
Prima di iniziare
Questo articolo sarà un tutorial passo passo. Se intendi seguirci, assicurati di soddisfare i seguenti prerequisiti:
- Windows 10: tutti gli esempi utilizzeranno Windows 10 Build 1903. L’esempio sarà nel medesimo dominio del server remoto Windows.
- PowerShell v6+ installato su Windows 10: tutti gli esempi utilizzeranno PowerShell 7 RC2.
- A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
- Porta TCP 22 disponibile sul server remoto
Configurazione del client SSH (Windows 10)
Prima di aprire una console PowerShell, dovrai prima eseguire alcune attività one-time per far funzionare SSH e PowerShell insieme, assicurandoti che Windows 10 possa connettersi a un server SSH remoto.
Aggiungi la cartella OpenSSH al percorso della variabile d’ambiente PATH
OpenSSH è preinstallato su Windows 10, ma a volte ha bisogno di un piccolo aiuto per funzionare con PowerShell Remoting. Se hai già provato a utilizzare Enter-PSSession
, ad esempio, per connetterti a un sistema SSH remoto e hai incontrato l’errore di seguito, assicurati che il percorso all’eseguibile OpenSSH (ssh.exe) nella variabile d’ambiente PATH environment variable.
Per aggiungere il percorso della cartella OpenSSH alla variabile d’ambiente PATH, fare clic sul pulsante Start e cercare impostazioni di sistema avanzate, quindi fare clic su Visualizza impostazioni di sistema avanzate come mostrato di seguito.

Quando compare la finestra Proprietà di sistema, fare clic sul pulsante Variabili d’ambiente.

Nella finestra Variabili d’ambiente, sotto variabili di sistema, selezionare Percorso e fare clic su Modifica.

Nella finestra Modifica variabile d’ambiente, fare clic su Nuovo e quindi inserire il percorso in cui risiede l’eseguibile ssh.exe. Per questo tutorial, il percorso è C:\Programmi\OpenSSH come mostrato di seguito. Una volta inserito, fare clic su OK due volte per salvare il nuovo valore.

Specificare il Sottosistema SSH
Ora è necessario specificare il sottosistema SSH per PowerShell da utilizzare durante la connessione via SSH al server Windows remoto. Se non si specifica a PowerShell quale sottosistema utilizzare, si otterrà inevitabilmente il seguente errore:
Enter-PSSession : Il processo in background ha segnalato un errore con il seguente messaggio: La sessione client SSH è terminata con il messaggio di errore: richiesta di sottosistema non riuscita sul canale 0.
Nota che se non ci si sta connettendo a una macchina server Windows, non sarà necessario eseguire questi passaggi.
Nel server remoto di Windows, aprire il file C:\ProgramData\ssh\ssh_config. Spostarsi fino alla sezione override default of no subsystems del file ssh_config. La sezione avrà un aspetto simile alla schermata riportata di seguito.

Sotto la riga esistente Subsystem, aggiungere il sottosistema PowerShell utilizzando la riga seguente:
Salvare il file ssh_config e riavviare il servizio Windows sshd nel server remoto di Windows come mostrato di seguito.
Una volta riavviato il servizio, dovresti ora essere in grado di connetterti tramite SSH e PowerShell.
Connessione tramite PowerShell e SSH
Ora che la configurazione è completa, è ora di testare il remoting di PowerShell.
Prima di tutto, prova ad accedere a una sessione interattiva utilizzando il cmdlet Enter-PSSession
. A differenza di quanto potresti essere abituato, non utilizzerai il parametro ComputerName
. Invece, utilizzerai il parametro HostName
per specificare il computer remoto.
Per impostazione predefinita, il remoting di PowerShell utilizza ancora WsMan. Per sovrascrivere la configurazione predefinita, utilizza il parametro SSHTransport
per indicare che desideri connetterti tramite SSH e PowerShell.
Quando tenti di connetterti per la prima volta con un nome utente e una password, dovrai creare una chiave privata SSH. Verrai quindi richiesto, come puoi vedere di seguito. Quando ti viene chiesto, digita ‘y’ per accettare.

Successivamente, ti verrà richiesta la password dell’utente con cui hai effettuato l’accesso attualmente.
Nota che in questo esempio il client Windows 10 e il server SSH Windows Server sono nello stesso dominio Active Directory. Di default, il PowerShell Remoting cercherà di autenticarsi con l’utente loggato. Puoi anche utilizzare il parametro
Credential
per specificare un nome utente e una password diversi.
Dopo aver fornito la password, dovresti trovarti nella solita shell del PowerShell Remoting.

Ora esci dalla sessione con il comando exit
e prova il comando New-PSSession
. Nota che, utilizzando gli stessi parametri HostName
e SSHTransport
come prima, il parametro Transport
ora appare come SSH
.
Puoi ancora utilizzare anche il protocollo di trasporto WsMan utilizzando il parametro ComputerName
senza utilizzare il parametro SSHTransport
.
Non è necessario utilizzare un nome utente e una password per SSH. Puoi invece utilizzare un file di chiave privata e utilizzare il parametro
KeyFilePath
per specificarne la posizione.

Non dimenticare di chiudere le sessioni aperte con il comando Get-PSSession | Remove-PSSession
!
Riepilogo
Ora dovresti sapere come configurare sia Windows 10 che Windows Server per l’utilizzo di SSH con il PowerShell Remoting. Una volta configurato, l’unica differenza nell’utilizzo del protocollo di trasporto WsMan e SSH sono un paio di parametri!
Se desideri saperne di più su PowerShell e SSH, assicurati di consultare l’articolo sulla documentazione di Microsoft PowerShell Remoting over SSH.
#PS7Now Collaboratori
Questo post fa parte di una serie su PowerShell 7 curata dai contribuenti di qualità che vedi di seguito. Assicurati di leggere i loro post e scoprire cosa stanno facendo sui loro blog!
Author | Blog | |
---|---|---|
Josh King | @WindosNZ | https://toastit.dev/ |
Adam Bertram | @adbertram | https://adamtheautomator.com/ |
Jonathan Medd | @jonathanmedd | |
Thomas Lee | @doctordns | https://tfl09.blogspot.com/ |
Prateek Singh | @singhprateik | https://ridicurious.com |
Dave Carroll | @thedavecarroll | https://powershell.anovelidea.org/ |
Dan Franciscus | @dan_franciscus | https://winsysblog.com/ |
Jeff Hicks | @jeffhicks | https://jdhitsolutions.com |
Josh Duffney | @joshduffney | http://duffney.io/ |
Mike Kanakos | @MikeKanakos | https://www.networkadm.in/ |
Tommy Maynard | @thetommymaynard | https://tommymaynard.com// |