Una delle grandi cose del modo in cui PowerShell è cambiato negli ultimi anni è che sta adottando molti modi per interagire con macchine non Windows. Uno di questi cambiamenti è stato supportare PSRemoting tramite SSH. PSRemoting tramite SSH significa anche avere PSRemoting su Linux!
Anche se configurare PSRemoting per funzionare con SSH e Linux richiede un po’ di impostazioni per farlo funzionare, ciò ti consente di utilizzare PowerShell per interagire con le macchine Linux in modo nativo.
In questo tutorial, imparerai come configurare un client Windows per connettersi a un computer Linux (CentOS) utilizzando PSRemoting tramite SSH e viceversa. Imparerai come autenticarti sia utilizzando una password e sia utilizzando un certificato.
Correlato: PowerShell Remoting: La Guida Definitiva
Prerequisiti
Questo tutorial sarà una procedura guidata. Se desideri seguirla, assicurati di avere quanto segue in anticipo:
- A Windows 10 build 1809 or greater machine. The tutorial will use Windows Server 2019 Standard as the remote server.
- A Linux machine that supports PowerShell 7. The tutorial will use CentOS 8.
- Diritti Sudo sulla macchina Linux e diritti di amministratore locale sulla macchina Windows. Dopo l’impostazione iniziale, alcuni dei diritti possono essere revocati.
Configurazione di Windows (Client) per PSRemoting tramite SSH
Innanzitutto, è necessario configurare il client PSRemoting (PowerShell) sul tuo client Windows. Per fare ciò, dovrai configurare e configurare sia PowerShell 7+ che OpenSSH.
Installazione di PowerShell 7+
Prima di tutto, installa PowerShell 7+. Questo tutorial non coprirà come farlo. Per saperne di più, consulta il link qui sotto.
Installazione di OpenSSH
Dovrai anche installare OpenSSH. OpenSSH è il pacchetto che PSRemoting utilizzerà per connettersi al computer Linux remoto. Puoi installare OpenSSH tramite PowerShell utilizzando il cmdlet Get-WindowsCapability
come mostrato di seguito.
A seconda se il tuo host Windows sarà un client e/o un server, dipende da quale funzionalità di Windows dovresti installare. Se ti stai connettendo da un server Windows a Linux, hai bisogno solo del client OpenSSH. Se ti stai connettendo da Linux a un server Windows, hai bisogno solo del server OpenSSH.
Il comando di seguito trova tutte le funzionalità di Windows con un nome che inizia con OpenSSH e le installa, quindi installerà sia il client che il server.
Se desideri installare solo il client, cambia il filtro nel blocco di script
Where-Object
inOpenSSH.Client*
e per il server il filtro dovrebbe essereOpenSSH.Server*
.
Correlato: Guida introduttiva all’utilizzo di SSH e PowerShell
Avvio del server SSH
Una volta installato OpenSSH, aprirà il firewall di Windows sulla porta 22, ma non avvierà il servizio del server OpenSSH per ascoltare sulla porta. Per avviare il server OpenSSH su Windows Server, esegui il seguente comando PowerShell per avviare il server OpenSSH e impostare il servizio per l’avvio automatico.
Configurazione della configurazione OpenSSH
Il prossimo passo è modificare il file di configurazione del demone sshd_config. All’interno di questo file, devi prima confermare che l’autenticazione della password sia abilitata e anche aggiungere il sottosistema PowerShell.
Questa parte del tutorial sta configurando il metodo più semplice utilizzando le password. Successivamente, imparerai come configurare l’autenticazione SSH utilizzando i certificati.
- Apri il file di configurazione nel tuo editor di testo preferito su C:\ProgramData\ssh\sshd_config.
2. Conferma che l’autenticazione della password sia abilitata, dove la linea PasswordAuthentication è commentata con un #
all’inizio o è impostata su yes
.

3. Aggiungi il sottosistema PowerShell. Per PowerShell 7, aggiungi la riga: Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
.
- La
-sshs
opzione è utilizzata per consentire a PowerShell 7 di funzionare all’interno di SSH come sottosistema. - La
-NoLogo
opzione fa sì che PowerShell nasconda le informazioni sul copyright all’avvio, garantendo che non ci siano output inaspettati all’avvio della sessione SSH.
4. Salva e chiudi il file di configurazione.
5. Riavvia il servizio sshd di Windows. Puoi farlo con PowerShell eseguendo Restart-Service sshd
.
Ora dovresti avere tutto configurato per connetterti dal (client) e al (server) questo server Windows utilizzando PSRemoting su SSH.
Configurazione di Linux (Server) per PSRemoting tramite SSH
Prossimo passo è Linux con una configurazione simile; installare PowerShell e configurare OpenSSH.
Nota che, poiché stiamo usando CentOS, alcuni comandi potrebbero essere diversi se si utilizza una distribuzione diversa.
Installare PowerShell 7+
Prima di tutto, installa PowerShell 7. Questo tutorial non coprirà come farlo. Invece, assicurati di consultare il seguente link.
Correlato: Come scaricare e installare PowerShell 7 su Windows, macOS e Linux
Configurazione di OpenSSH
Come per Windows Server, avrai bisogno di OpenSSH. A differenza di Windows, però, OpenSSH è probabilmente già installato. Per questo tutorial eseguito su CentOS 8, la macchina Linux ha già sia il client che il server installati di default, ma puoi verificarlo utilizzando il seguente comando:
Se il client e il server sono installati, dovresti ottenere un risultato simile all’output qui di seguito.

Configurare il file di configurazione SSH:
- Aprire il file sshd_config eseguendo il comando
sudo vi /etc/ssh/sshd_config
.
2. Aggiungere il sottosistema PowerShell come si fa su Windows Server, aggiungendo la seguente riga al file di configurazione.
3. Uscire da vi e salvare il file.
4. Riavviare il demone ssh per applicare le modifiche eseguendo il comando sudo systemctl restart sshd
.
Per impostazione predefinita, l’autenticazione tramite password e chiave pubblica sarà abilitata nella maggior parte dei casi, inclusa CentOS 8. Non è necessario aggiungere nulla qui.
Collegamento da/a Windows/Linux con Autenticazione Password
Una volta configurato tutto sia sulle macchine Linux che su Windows, è il momento di mettere a frutto il lavoro che hai fatto. Proviamo ora a connetterci da Windows a Linux e viceversa utilizzando l’autenticazione password.
L’autenticazione basata su password sembra e si comporta come l’uso di SSH con un nome utente e una password.
Comandi di Connessione
Per testare la connessione con PSRemoting tramite SSH da Windows a Linux o da Linux a Windows, utilizziamo sia una sessione “ad-hoc” utilizzando il cmdlet Invoke-Command
sia una sessione persistente utilizzando New-PSSession
.
Correlato: Invoke-Command: Il Modo Migliore per Eseguire Codice Remoto
Testa la connessione PSRemoting utilizzando Invoke-Command
seguendo i passaggi:
- Apri la tua console PowerShell 7.
2. Imposta i parametri per il cmdlet Invoke-Command
. In questo caso, i parametri sotto si connetteranno a un computer chiamato SRV1 utilizzando un account utente locale su SRV1 chiamato User.
3. Esegui Invoke-Command
sfruttando i parametri sopra e eseguendo un comando (in questo caso Get-Process
) all’interno di un blocco di script.
Correlato: PowerShell Splatting: Cos’è e Come Funziona?
Dovresti quindi vedere un elenco di tutti i processi in esecuzione sul computer SRV1.
Puoi anche stabilire una connessione persistente che ti permette di connetterti da e verso e di eseguire comandi interattivamente attraverso:
- Fornire i parametri sopra e passarli al cmdlet
New-PSSession
.
2. Connessione a quella sessione interattivamente utilizzando il cmdlet Enter-PSSession
.
3. Dopo aver eseguito il comando Enter-PSSession
di cui sopra, ti verrà chiesta la password per l’utente. Dopo l’autenticazione, sarai connesso all’altro computer all’interno di PowerShell.
Nota che nessuno dei comandi sopra richiedeva il comune parametro Credential
per fornire un nome utente e una password per la connessione. Invece, abbiamo usato il parametro SSHTransport
. SSH non utilizza lo stesso processo di autenticazione di Windows per passare da un computer Windows a un altro, quindi non può interpretare gli oggetti PSCredential.
Correlato: Utilizzo del cmdlet Get-Credential
di PowerShell e tutto ciò che riguarda le credenziali.
Utilizzando questo approccio, è possibile sfruttare anche sessioni disconnesse.
Configurazione dell’Autenticazione Basata su Chiave Pubblica
Mentre l’autenticazione basata su password è facile da configurare e semplice da utilizzare, presenta due problemi.
- Non esiste un modo per autenticarsi senza che qualcuno esegua manualmente i comandi in modo sicuro.
- Stai inviando una password attraverso la rete.
Anche se la password, in questo caso, è crittografata all’interno della connessione SSH, il server riceve la password in chiaro. Se il server è compromesso in qualche modo, potrebbe diventare un problema di sicurezza.
Generazione di chiavi pubbliche/private
Quando si utilizza l’autenticazione a chiave pubblica di qualsiasi tipo, è necessario generare prima una chiave pubblica dal client. Questo requisito si applica sia a Linux che a Windows.
Su entrambe le macchine server Linux o Windows:
- Esegui
ssh-keygen
per generare la coppia di chiavi.
Se stai eseguendo
ssh-keygen
su Linux, sappi che genererà una coppia di chiavi RSA per impostazione predefinita. Molti nuovi sistemi operativi Linux non consentiranno l’uso di coppie di chiavi RSA per l’autenticazione per impostazione predefinita. Per correggere questo problema, utilizzassh-keygen -t ed25519
.
2. Ti verrà chiesto un percorso per memorizzare la chiave privata e una passphrase per crittografare la chiave privata. Nel caso in cui non si desideri fornire una password durante l’autenticazione, è possibile lasciare vuota la passphrase.
3. Solo per Windows: Esegui i comandi seguenti da PowerShell, dove <ProfilePath>
è il percorso del tuo profilo (probabilmente C:\Users\NomeUtente).
L’implementazione di OpenSSH di Windows dispone di un servizio ssh-agent che consente di memorizzare le chiavi private nel Contesto di Sicurezza di Windows dell’utente con cui si è effettuato l’accesso. Ciò ti permetterà di importare la tua chiave privata SSH nello ssh-agent e successivamente eliminare la chiave dal sistema di file per renderla più sicura.
4. Ora copia la chiave pubblica generata (<directory home dell’utente>\.ssh\id_ed25519.pub) al server a cui desideri connetterti. Windows non fornisce uno strumento per eseguire questa copia, quindi può essere completato con SCP. Esegui il comando sottostante per copiare la chiave pubblica sulla macchina Linux.
Per copiare da Linux a Windows:
5. Inserisci la password dell’utente connesso. Una volta inserita, PowerShell/Bash copierà la chiave e sarai disconnesso dalla macchina remota.
Connessione da/a Windows/Linux con Autenticazione a Chiave Pubblica
Una volta configurate le chiavi pubbliche e private, la connessione da/a Windows e Linux dovrebbe essere facile. È praticamente identica all’autenticazione basata su password.
Per connettersi con una chiave pubblica su Windows, utilizza gli stessi comandi mostrati in Comandi di Connessione sopra. Noterai solo una differenza; non verrai richiesto di inserire le credenziali.
Di seguito è riportato un esempio di connessione da Linux a Windows utilizzando l’opzione -v
per vedere cosa succede durante la connessione.

-v
switch