SSH üzerinden PowerShell uzaktan iletişimi
Genel bakış
PowerShell uzaktan iletişim normalde bağlantı anlaşması ve veri aktarımı için WinRM kullanır. SSH artık Linux ve Windows platformları için kullanılabilir ve gerçek çok platformlu PowerShell uzaktan iletişimini sağlar.
WinRM, PowerShell uzak oturumları için sağlam bir barındırma modeli sağlar. SSH tabanlı uzaktan iletişim şu anda uzak uç nokta yapılandırmasını ve Yeterli Yönetici dağıtımını (JEA) desteklememektedir.
SSH uzaktan iletişim, Windows ve Linux bilgisayarlar arasında temel PowerShell oturumu uzaktan iletişimini gerçekleştirmenizi sağlar. SSH uzaktan iletişim, hedef bilgisayarda SSH alt sistemi olarak bir PowerShell ana bilgisayar işlemi oluşturur. Sonunda, uç nokta yapılandırmasını ve JEA'yı desteklemek için WinRM'ye benzer genel bir barındırma modeli uygulayacağız.
, Enter-PSSession
ve Invoke-Command
cmdlet'leri New-PSSession
artık bu yeni uzaktan iletişim bağlantısını desteklemek için yeni bir parametre kümesine sahip.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Uzak oturum oluşturmak için hedef bilgisayarı HostName parametresiyle belirtir ve kullanıcı adını UserName ile sağlarsınız. Cmdlet'leri etkileşimli olarak çalıştırırken parola girmeniz istenir. KeyFilePath parametresiyle özel bir anahtar dosyası kullanarak SSH anahtarı kimlik doğrulamasını da kullanabilirsiniz. SSH kimlik doğrulaması için anahtar oluşturma, platforma göre değişir.
Genel kurulum bilgileri
PowerShell 6 veya üzeri ve SSH tüm bilgisayarlara yüklenmelidir. Bilgisayarlara uzaktan erişebilmek için hem SSH istemcisini (ssh.exe
) hem de sunucuyu (sshd.exe
) yükleyin. Windows için OpenSSH artık Windows 10 derleme 1809 ve Windows Server 2019'da kullanılabilir. Daha fazla bilgi için bkz . OpenSSH ile Windows'ı yönetme. Linux için, platformunuza uygun sshd sunucusu da dahil olmak üzere SSH'yi yükleyin. Ayrıca SSH uzaktan iletişim özelliğini edinmek için GitHub'dan PowerShell yüklemeniz gerekir.
SSH sunucusu, uzak bilgisayarda bir PowerShell işlemini barındıracak bir SSH alt sistemi oluşturacak şekilde yapılandırılmalıdır. Ayrıca parolayı veya anahtar tabanlı kimlik doğrulamasını etkinleştirmeniz gerekir.
Windows bilgisayarına SSH hizmetini yükleme
PowerShell'in en son sürümünü yükleyin. Daha fazla bilgi için bkz . Windows'a PowerShell Yükleme.
Parametre kümelerini listeleyerek PowerShell'in SSH uzaktan iletişim desteğine
New-PSSession
sahip olduğunu onaylayabilirsiniz. SSH ile başlayan parametre kümesi adları olduğunu göreceksiniz. Bu parametre kümeleri SSH parametrelerini içerir.(Get-Command New-PSSession).ParameterSets.Name
Name ---- SSHHost SSHHostHashParam
En son Win32 OpenSSH'yi yükleyin. Yükleme yönergeleri için bkz . OpenSSH kullanmaya başlama.
Not
PowerShell'i OpenSSH için varsayılan kabuk olarak ayarlamak istiyorsanız bkz . OpenSSH için Windows Yapılandırma.
konumunda
$env:ProgramData\ssh
bulunansshd_config
dosyayı düzenleyin.Parola kimlik doğrulamasının etkinleştirildiğinden emin olun:
PasswordAuthentication yes
Uzak bilgisayarda bir PowerShell işlemini barındıran SSH alt sistemini oluşturun:
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologo
Not
PowerShell 7.4'den başlayarak, PowerShell'i SSH sunucu modunda çalıştırırken parametresini
-nologo
kullanmanız gerekmez.Not
PowerShell yürütülebilir dosyasının varsayılan konumudur
c:/progra~1/powershell/7/pwsh.exe
. Konum, PowerShell'i nasıl yüklediğinize bağlı olarak değişebilir.Boşluk içeren tüm dosya yolları için 8.3 kısa adını kullanmanız gerekir. Windows için OpenSSH'de alanların alt sistem yürütülebilir yollarında çalışmasını engelleyen bir hata var. Daha fazla bilgi için bu GitHub konusuna bakın.
Windows'taki klasörün 8.3 kısa adı
Program Files
genellikleProgra~1
şeklindedir. Ancak, emin olmak için aşağıdaki komutu kullanabilirsiniz:Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileName
EightDotThreeFileName --------------------- c:\progra~1
İsteğe bağlı olarak anahtar kimlik doğrulamasını etkinleştirin:
PubkeyAuthentication yes
Daha fazla bilgi için bkz . OpenSSH Anahtarlarını Yönetme.
sshd hizmetini yeniden başlatın.
Restart-Service sshd
OpenSSH'nin yüklendiği yolu Path ortam değişkeninize ekleyin. Örneğin,
C:\Program Files\OpenSSH\
. Bu girdi, öğesininssh.exe
bulunmasına olanak tanır.
Ubuntu Linux bilgisayarına SSH hizmetini yükleme
PowerShell'in en son sürümünü yükleyin, bkz . Ubuntu'da PowerShell'i yükleme.
Ubuntu OpenSSH Sunucusu'nu yükleyin.
sudo apt install openssh-client sudo apt install openssh-server
sshd_config
dosyasını konumunda/etc/ssh
düzenleyin.Parola kimlik doğrulamasının etkinleştirildiğinden emin olun:
PasswordAuthentication yes
İsteğe bağlı olarak anahtar kimlik doğrulamasını etkinleştirin:
PubkeyAuthentication yes
Ubuntu'da SSH anahtarları oluşturma hakkında daha fazla bilgi için bkz. ssh-keygen için manpage.
PowerShell alt sistemi girdisi ekleyin:
Subsystem powershell /usr/bin/pwsh -sshs -nologo
Not
PowerShell yürütülebilir dosyasının varsayılan konumudur
/usr/bin/pwsh
. Konum, PowerShell'i nasıl yüklediğinize bağlı olarak değişebilir.Not
PowerShell 7.4'den başlayarak, PowerShell'i SSH sunucu modunda çalıştırırken parametresini
-nologo
kullanmanız gerekmez.Ssh hizmetini yeniden başlatın.
sudo systemctl restart sshd.service
SSH hizmetini macOS bilgisayara yükleme
PowerShell'in en son sürümünü yükleyin. Daha fazla bilgi için macOS'a PowerShell yükleme.
Aşağıdaki adımları izleyerek SSH Uzaktan İletişimi'nin etkinleştirildiğinden emin olun:
System Settings
'ı açın.General
seçeneğine tıklayınSharing
seçeneğine tıklayın.- öğesini ayarlamak
Remote Login: On
için denetleyinRemote Login
. - Uygun kullanıcılara erişim izni verin.
sshd_config
dosyasını konumunda/private/etc/ssh/sshd_config
düzenleyin.Nano gibi bir metin düzenleyicisi kullanın:
sudo nano /private/etc/ssh/sshd_config
Parola kimlik doğrulamasının etkinleştirildiğinden emin olun:
PasswordAuthentication yes
PowerShell alt sistemi girdisi ekleyin:
Subsystem powershell /usr/local/bin/pwsh -sshs -nologo
Not
PowerShell yürütülebilir dosyasının varsayılan konumudur
/usr/local/bin/pwsh
. Konum, PowerShell'i nasıl yüklediğinize bağlı olarak değişebilir.Not
PowerShell 7.4'den başlayarak, PowerShell'i SSH sunucu modunda çalıştırırken parametresini
-nologo
kullanmanız gerekmez.İsteğe bağlı olarak anahtar kimlik doğrulamasını etkinleştirin:
PubkeyAuthentication yes
sshd hizmetini yeniden başlatın.
sudo launchctl stop com.openssh.sshd sudo launchctl start com.openssh.sshd
Not
İşletim sisteminizi yükselttiğinizde SSH yapılandırma dosyasının üzerine yazılabilir. Yükseltmeden sonra yapılandırma dosyasını denetlediğinizden emin olun.
Kimlik Doğrulaması
SSH üzerinden PowerShell uzaktan iletişim, SSH istemcisi ile SSH hizmeti arasındaki kimlik doğrulama değişimine dayanır ve hiçbir kimlik doğrulama şeması uygulamaz. Sonuç olarak, çok faktörlü kimlik doğrulaması dahil olmak üzere yapılandırılmış tüm kimlik doğrulama düzenleri SSH tarafından ve PowerShell'in bağımsız olarak işlenir. Örneğin, SSH hizmetini ortak anahtar kimlik doğrulaması ve ek güvenlik için tek seferlik parola gerektirecek şekilde yapılandırabilirsiniz. Çok faktörlü kimlik doğrulaması yapılandırması bu belgelerin kapsamı dışındadır. PowerShell uzaktan iletişimiyle kullanmayı denemeden önce çok faktörlü kimlik doğrulamasını doğru yapılandırma ve PowerShell dışında çalıştığını doğrulama hakkında SSH belgelerine bakın.
Not
Kullanıcılar uzak oturumlarda aynı ayrıcalıkları korur. Başka bir deyişle, Yönetici istrator'ların yükseltilmiş bir kabuğa erişimi vardır ve normal kullanıcılar erişimi yoktur.
PowerShell uzaktan iletişim örneği
Uzaktan iletişimi test etmenin en kolay yolu, bunu tek bir bilgisayarda denemektir. Bu örnekte, aynı Linux bilgisayara bir uzak oturum oluşturacağız. PowerShell cmdlet'lerini etkileşimli olarak kullanıyoruz, bu nedenle SSH'den konak bilgisayarı doğrulamayı isteyen ve parola isteyen istemler görüyoruz. Uzaktan iletişimin çalıştığından emin olmak için windows bilgisayarda da aynı şeyi yapabilirsiniz. Ardından, ana bilgisayar adını değiştirerek bilgisayarlar arasında uzaklık sağlayın.
Linux'ta Linux'a
$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
Linux'ta Windows'a
Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]
Windows'ta Windows'a
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>
Sınırlamalar
Sudo komutu, Linux bilgisayarına uzak oturumda çalışmaz.
SSH üzerinden PSRemoting Profilleri desteklemez ve erişimi
$PROFILE
yoktur. Oturuma girdikten sonra, profili tam dosya yolu ile nokta kaynak oluşturarak yükleyebilirsiniz. Bu, SSH profilleriyle ilgili değildir. SSH sunucusunu varsayılan kabuk olarak PowerShell kullanacak ve SSH aracılığıyla bir profil yüklenecek şekilde yapılandırabilirsiniz. Daha fazla bilgi için SSH belgelerine bakın.PowerShell 7.1'den önce SSH üzerinden uzaktan iletişim, ikinci atlama uzak oturumlarını desteklemiyordu. Bu özellik WinRM kullanan oturumlarla sınırlıydı. PowerShell 7.1, tüm etkileşimli uzak oturumların içinden çalışmasına izin verir
Enter-PSSession
.Enter-PSHostProcess
Ayrıca bkz.
PowerShell