SSH e PowerShell: Configurare il client SSH di Windows

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.

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

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.

Adding OpenSSH folder path

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

Environment Variables in System Properties

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

System Variables in the Environment Variables

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.

Editing Environment Variable

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.

Override Default of no Subsystems

Sotto la riga esistente Subsystem, aggiungere il sottosistema PowerShell utilizzando la riga seguente:

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

Salvare il file ssh_config e riavviare il servizio Windows sshd nel server remoto di Windows come mostrato di seguito.

Get-Service -Name sshd | Restart-Service

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.

Creating SSH Private Key

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.

Powershell Remoting Prompt

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.

New PSSession Showing up SSH

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 Twitter 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//
#PS7Now Contributors

Source:
https://adamtheautomator.com/powershell-ssh/