Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Informazioni generali
La comunicazione remota di PowerShell solitamente usa WinRM per la negoziazione di connessione e il trasporto dei dati. SSH è ora disponibile per le piattaforme Linux e Windows e permette a PowerShell di offrire un'autentica comunicazione remota multipiattaforma.
WinRM offre un solido modello di hosting per sessioni remote di PowerShell. La comunicazione remota basata su SSH attualmente non supporta la configurazione di endpoint remoti e JEA (Just Enough Administration).
La comunicazione remota SSH consente di eseguire la comunicazione remota della sessione di PowerShell di base tra computer Windows e Linux. La comunicazione remota SSH crea un processo host di PowerShell come sottosistema SSH sul computer di destinazione. Infine verrà implementato un modello di hosting generale, simile a WinRM, per supportare la configurazione degli endpoint e JEA.
I cmdlet New-PSSession
, Enter-PSSession
e Invoke-Command
dispongono ora di un nuovo parametro impostato per supportare questa nuova connessione remota.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Per creare una sessione remota, specificare il computer di destinazione con il parametro HostName e specificare il nome utente con UserName. Quando si eseguono i cmdlet in modo interattivo, viene richiesta una password. È anche possibile usare l'autenticazione con chiave SSH usando un file di chiave privata con il parametro KeyFilePath. La creazione di chiavi per l'autenticazione SSH varia in base alla piattaforma.
Informazioni generali sulla configurazione
PowerShell 6 o versione successiva e SSH deve essere installato in tutti i computer. Installare sia il client SSH (ssh.exe
) che il server (sshd.exe
) in modo da poter essere remoti da e verso i computer. OpenSSH per Windows è ora disponibile in Windows 10 build 1809 e Windows Server 2019. Per altre informazioni, vedere Gestire Windows con OpenSSH. Su Linux, installare SSH, incluso il server sshd, adatto alla tua piattaforma. È anche necessario installare PowerShell da GitHub per ottenere la funzionalità di comunicazione remota SSH.
Il server SSH deve essere configurato per creare un sottosistema SSH per ospitare un processo di PowerShell nel computer remoto. È inoltre necessario abilitare l'autenticazione con password o l'autenticazione basata su chiave .
Installare il servizio SSH in un computer Windows
Installare la versione più recente di PowerShell. Per altre informazioni, vedere Installazione di PowerShell in Windows.
È possibile verificare che PowerShell disponga del supporto per la comunicazione remota SSH elencando i set di parametri
New-PSSession
. Si noterà che sono presenti nomi di set di parametri che iniziano con SSH. Questi set di parametri includono parametri SSH.(Get-Command New-PSSession).ParameterSets.Name
Name ---- SSHHost SSHHostHashParam
Installare la versione più recente di OpenSSH Win32. Per istruzioni sull'installazione, vedere Introduzione a OpenSSH.
Nota
Per impostare PowerShell come shell predefinita per OpenSSH, vedere Configurazione di Windows per OpenSSH.
Modifica il file
sshd_config
situato in$Env:ProgramData\ssh
.Assicurarsi che l'autenticazione della password sia abilitata:
PasswordAuthentication yes
Creare il sottosistema SSH che ospita un processo di PowerShell nel computer remoto:
Subsystem powershell C:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
Nota
A partire da PowerShell 7.4, non è più necessario usare il parametro
-NoLogo
quando si esegue PowerShell in modalità server SSH.Nota
Il percorso predefinito dell'eseguibile di PowerShell è
C:/progra~1/powershell/7/pwsh.exe
. Il percorso può variare a seconda della modalità di installazione di PowerShell.È necessario usare il nome breve 8.3 per tutti i percorsi di file che contengono spazi. È presente un bug in OpenSSH per Windows che impedisce l'uso di spazi nei percorsi di file eseguibili del sottosistema. Per altre informazioni, vedere questo problema in GitHub.
Il nome breve 8.3 per la cartella
Program Files
in Windows è in genereProgra~1
. Tuttavia, è possibile usare il comando seguente per assicurarsi:Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileName
EightDotThreeFileName --------------------- C:\progra~1
Facoltativamente, abilitare l'autenticazione della chiave:
PubkeyAuthentication yes
Per altre informazioni, vedere Gestione delle chiavi OpenSSH.
Riavviare il servizio sshd.
Restart-Service sshd
Aggiungere il percorso in cui è installato OpenSSH nella variabile di ambiente PATH. Ad esempio:
C:\Program Files\OpenSSH\
. Questa voce consente di trovare ilssh.exe
.
Installare il servizio SSH in un computer Ubuntu Linux
Installare la versione più recente di PowerShell, vedere Installazione di PowerShell in Ubuntu.
Installare il server OpenSSH di Ubuntu .
sudo apt install openssh-client sudo apt install openssh-server
Modificare il file
sshd_config
nel percorso/etc/ssh
.Assicurarsi che l'autenticazione della password sia abilitata:
PasswordAuthentication yes
Facoltativamente, abilitare l'autenticazione della chiave:
PubkeyAuthentication yes
Per altre informazioni sulla creazione di chiavi SSH in Ubuntu, vedere la pagina manpage per ssh-keygen.
Aggiungere una voce del sottosistema PowerShell:
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
Nota
Il percorso predefinito dell'eseguibile di PowerShell è
/usr/bin/pwsh
. Il percorso può variare a seconda della modalità di installazione di PowerShell.Nota
A partire da PowerShell 7.4, non è più necessario usare il parametro
-NoLogo
quando si esegue PowerShell in modalità server SSH.Riavviare il servizio ssh.
sudo systemctl restart sshd.service
Installare il servizio SSH in un computer macOS
Installare la versione più recente di PowerShell. Per altre informazioni, Installazione di PowerShell su macOS.
Assicurarsi che la comunicazione remota SSH sia abilitata seguendo questa procedura:
- Apri
System Settings
. - Fare clic su
General
- Cliccare su
Sharing
. - Controllare
Remote Login
per impostareRemote Login: On
. - Consentire l'accesso agli utenti appropriati.
- Apri
Modificare il file
sshd_config
nel percorso/private/etc/ssh/sshd_config
.Usare un editor di testo, ad esempio nano:
sudo nano /private/etc/ssh/sshd_config
Assicurarsi che l'autenticazione della password sia abilitata:
PasswordAuthentication yes
Aggiungi una voce del sottosistema PowerShell:
Subsystem powershell /usr/local/bin/pwsh -sshs -NoLogo
Nota
Il percorso predefinito dell'eseguibile di PowerShell è
/usr/local/bin/pwsh
. Il percorso può variare a seconda della modalità di installazione di PowerShell.Nota
A partire da PowerShell 7.4, non è più necessario usare il parametro
-NoLogo
quando si esegue PowerShell in modalità server SSH.Facoltativamente, abilitare l'autenticazione della chiave:
PubkeyAuthentication yes
Riavviare il servizio sshd.
sudo launchctl stop com.openssh.sshd sudo launchctl start com.openssh.sshd
Nota
Quando si aggiorna il sistema operativo, il file di configurazione SSH potrebbe essere sovrascritto. Assicurarsi di controllare il file di configurazione dopo un aggiornamento.
Autenticazione
La comunicazione remota di PowerShell tramite SSH si basa sullo scambio di autenticazione tra il client SSH e il servizio SSH e non implementa schemi di autenticazione. Il risultato è che tutti gli schemi di autenticazione configurati, inclusa l'autenticazione a più fattori, vengono gestiti da SSH e indipendenti da PowerShell. Ad esempio, è possibile configurare il servizio SSH per richiedere l'autenticazione a chiave pubblica e una password una tantum per una maggiore sicurezza. La configurazione dell'autenticazione a più fattori non rientra nell'ambito di questa documentazione. Consultare la documentazione di SSH su come configurare correttamente l'autenticazione a più fattori e verificarne il funzionamento al di fuori di PowerShell prima di tentare di usarla con il remoting di PowerShell.
Nota
Gli utenti mantengono gli stessi privilegi nelle sessioni remote. Ciò significa che gli amministratori hanno accesso a una shell con privilegi elevati e gli utenti normali non hanno accesso.
Esempio di remotizzazione di PowerShell
Il modo più semplice per testare la comunicazione remota consiste nel provarlo in un singolo computer. In questo esempio viene creata una sessione remota nello stesso computer Linux. Si usano i cmdlet di PowerShell in modo interattivo, quindi vengono visualizzati prompt da SSH che chiedono di verificare il computer host e di richiedere una password. È possibile eseguire la stessa operazione in un computer Windows per garantire il funzionamento della comunicazione remota. Quindi, connettersi in remoto ai computer modificando il nome del host.
Da Linux a Linux
$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' can't be established.
ECDSA key fingerprint is SHA256:2kCbnhT2dUE6WCGgVJ8Hyfu1z2wE4lifaJXLO7QJy0Y.
Are you sure you want to continue connecting (yes/no)?
TestUser@UbuntuVM1s password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 UbuntuVM1 RemoteMachine Opened DefaultShell Available
Enter-PSSession $session
[UbuntuVM1]: PS /home/TestUser> uname -a
Linux TestUser-UbuntuVM1 4.2.0-42-generic 49~16.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[UbuntuVM1]: PS /home/TestUser> Exit-PSSession
Invoke-Command $session -ScriptBlock { Get-Process pwsh }
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName PSComputerName
------- ------ ----- ----- ------ -- -- ----------- --------------
0 0 0 19 3.23 10635 635 pwsh UbuntuVM1
0 0 0 21 4.92 11033 017 pwsh UbuntuVM1
0 0 0 20 3.07 11076 076 pwsh UbuntuVM1
Da Linux a Windows
Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]
Da Windows a Windows
C:\Users\PSUser\Documents>pwsh.exe
PowerShell
Copyright (c) Microsoft Corporation. All rights reserved.
$session = New-PSSession -HostName WinVM2 -UserName PSRemoteUser
The authenticity of host 'WinVM2 (10.13.37.3)' can't be established.
ECDSA key fingerprint is SHA256:kSU6slAROyQVMEynVIXAdxSiZpwDBigpAF/TXjjWjmw.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added 'WinVM2,10.13.37.3' (ECDSA) to the list of known hosts.
PSRemoteUser@WinVM2's password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 WinVM2 RemoteMachine Opened DefaultShell Available
Enter-PSSession -Session $session
[WinVM2]: PS C:\Users\PSRemoteUser\Documents> $PSVersionTable
Name Value
---- -----
PSEdition Core
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
SerializationVersion 1.1.0.1
BuildVersion 3.0.0.0
CLRVersion
PSVersion 6.0.0-alpha
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
GitCommitId v6.0.0-alpha.17
[WinVM2]: PS C:\Users\PSRemoteUser\Documents>
Limitazioni
Il comando sudo non funziona in una sessione remota in un computer Linux.
PSRemoting su SSH non supporta i profili e non ha accesso a
$PROFILE
. Una volta in una sessione, è possibile caricare un profilo eseguendo il dot sourcing del profilo con il percorso file completo. Questo non è correlato ai profili SSH. È possibile configurare il server SSH per l'uso di PowerShell come shell predefinita e per caricare un profilo tramite SSH. Per altre informazioni, vedere la documentazione di SSH.Prima di PowerShell 7.1, la comunicazione remota su SSH non supportava sessioni remote di secondo hop. Questa funzionalità era limitata alle sessioni che usano WinRM. PowerShell 7.1 consente
Enter-PSSession
eEnter-PSHostProcess
di funzionare da qualsiasi sessione remota interattiva.