SSH üzerinden PowerShell uzaktan iletişimi
Genel Bakış
PowerShell iletişim, bağlantı anlaşması ve veri taşıma için normalde WinRM kullanır. SSH artık Linux ve Windows platformlarında kullanılabilir ve gerçek çok platformlu PowerShellmoting'e izin verir.
WinRM, PowerShell uzak oturumları için güçlü bir barındırma modeli sağlar. SSH tabanlı uzaktan izleme şu anda uzak uç nokta yapılandırmasını ve Yeterli Yönetim 'i (JEA) desteklemez.
SSH ile ağ ve Linux bilgisayarları arasında temel PowerShell oturumu Windows sağlar. SSH alt sistemi, hedef bilgisayarda bir PowerShell konak işlemi oluşturur. Sonunda, uç nokta yapılandırmasını ve JEA'yı desteklemek için WinRM'ye benzer bir genel barındırma modeli uygulayacak.
New-PSSession, Enter-PSSession ve Invoke-Command cmdlet'leri artık bu yeni iletişim bağlantısını destekleyecek şekilde ayarlanmış yeni bir parametreye 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 belirtirsiniz. Cmdlet'leri etkileşimli olarak çalıştırarak 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 işlemi platforma göre değişir.
Genel kurulum bilgileri
PowerShell 6 veya üst sürümü ve SSH tüm bilgisayarlarda yüklü olması gerekir. Bilgisayarlara ve bilgisayarlardan uzak bağlantı kurabilirsiniz, böylece hem SSH istemcisini ( ssh.exe ) hem de sunucuyu ( ) sshd.exe yükleyin. Windows için OpenSSH, 1809 ve Windows 10 Server 2019'da Windows kullanılabilir. Daha fazla bilgi için bkz. OpenSSH ile Windows yönetme. Linux için sshd sunucusu da dahil olmak üzere platform için uygun olan SSH'i yükleyin. Ayrıca SSH uzak GitHub powershell'i de yüklemeniz gerekir. SSH sunucusunun, uzak bilgisayarda bir PowerShell işlemi barındırmak için bir SSH alt sistemi oluşturmak üzere yapılandırılması gerekir. Ayrıca parola veya anahtar tabanlı kimlik doğrulamasını etkinleştirmeniz gerekir.
SSH hizmetini bir Windows yükleme
PowerShell'in en son sürümünü yükleyin. Daha fazla bilgi için bkz. PowerShell'i Windows.
Parametre kümelerini listeleerek PowerShell'in SSH yenidenmoting desteğine sahip olduğunu
New-PSSessiononaylayın. SSH ile başlayan parametre kümesi adları olduğunu fark vardır. Bu parametre kümeleri SSH parametrelerini içerir.(Get-Command New-PSSession).ParameterSets.NameName ---- SSHHost SSHHostHashParamEn son Win32 OpenSSH'i yükleyin. Yükleme yönergeleri için bkz. OpenSSH ile çalışmaya başlama.
Not
PowerShell'i OpenSSH için varsayılan kabuk olarak ayarlamak için bkz. OpenSSH için Windows yapılandırma.
dosyasında
sshd_configbulunan dosyasını$env:ProgramData\sshdüzenleyin.Parola kimlik doğrulamasının etkinleştirildiğinden emin olun:
PasswordAuthentication yesUzak bilgisayarda bir PowerShell işlemi barındıran SSH alt sistemi oluşturun:
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogoNot
PowerShell yürütülebilir dosyasının varsayılan konumu şu
c:/progra~1/powershell/7/pwsh.exeşekildedir: . Konum, PowerShell'i nasıl yüklemiş olduğunuza bağlı olarak değişebilir.Boşluk içeren tüm dosya yolları için 8.3 kısa adını kullansanız gerekir. OpenSSH'de alt sistem yürütülebilir yollarında Windows engelleyen bir hata var. Daha fazla bilgi için bu soruna GitHub bakın.
dosya klasöründeki klasörün 8.3
Program Fileskısa WindowsProgra~1olur. Ancak, emin olmak için aşağıdaki komutu kullanabilirsiniz:Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileNameEightDotThreeFileName --------------------- c:\progra~1İsteğe bağlı olarak, anahtar kimlik doğrulamasını etkinleştirin:
PubkeyAuthentication yesDaha fazla bilgi için bkz. OpenSSH Anahtarlarını Yönetme.
sshd hizmetini yeniden başlatın.
Restart-Service sshdOpenSSH'nin yük olduğu yolu Yol ortam değişkeninize ekleyin. Örneğin,
C:\Program Files\OpenSSH\. Bu girdi, girişininssh.exebulunamalarını sağlar.
SSH hizmetini bir Ubuntu Linux yükleme
PowerShell'in en son sürümünü yükleyin, bkz. PowerShell'i Ubuntu'ya yükleme.
Ubuntu OpenSSH Sunucusunu yükleyin.
sudo apt install openssh-client sudo apt install openssh-serverdosyasını
sshd_configkonumda/etc/sshdü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 yesUbuntu'da SSH anahtarları oluşturma hakkında daha fazla bilgi için ssh-keygen için manpage'e bakın.
PowerShell alt sistemi girişi ekleyin:
Subsystem powershell /usr/bin/pwsh -sshs -NoLogoNot
PowerShell yürütülebilir dosyasının varsayılan konumu şu
/usr/bin/pwshşekildedir: . Konum, PowerShell'i nasıl yüklemiş olduğunuza bağlı olarak değişebilir.ssh hizmetini yeniden başlatın.
sudo systemctl restart sshd.service
SSH hizmetini bir macOS bilgisayara yükleme
PowerShell'in en son sürümünü yükleyin. Daha fazla bilgi için macOS'ta PowerShell'i yükleme.
Aşağıdaki adımları izleyin ve SSH Remoting'in etkinleştirildiğinden emin olun:
System Preferencesdosyasını açın.Sharingseçeneğine tıklayın.- ayarlamak
Remote Loginiçin kontrolRemote Login: Onedin. - Uygun kullanıcılara erişim izni verme.
dosyasını
sshd_configkonumda/private/etc/ssh/sshd_configdüzenleyin.nano gibi bir metin düzenleyicisi kullanın:
sudo nano /private/etc/ssh/sshd_configParola kimlik doğrulamasının etkinleştirildiğinden emin olun:
PasswordAuthentication yesPowerShell alt sistemi girişi ekleyin:
Subsystem powershell /usr/local/bin/pwsh -sshs -NoLogoNot
PowerShell yürütülebilir dosyasının varsayılan konumu şu
/usr/local/bin/pwshşekildedir: . Konum, PowerShell'i nasıl yüklemiş olduğunuza bağlı olarak değişebilir.İsteğe bağlı olarak, anahtar kimlik doğrulamasını etkinleştirin:
PubkeyAuthentication yessshd hizmetini yeniden başlatın.
sudo launchctl stop com.openssh.sshd sudo launchctl start com.openssh.sshd
Kimlik Doğrulaması
SSH üzerinden PowerShell iletişiminde SSH istemcisi ile SSH hizmeti arasında kimlik doğrulama değişimi kullanılır ve herhangi bir kimlik doğrulama şeması uygulanmaz. Sonuç olarak, çok faktörlü kimlik doğrulaması da dahil olmak üzere yapılandırılmış tüm kimlik doğrulama düzenleri SSH tarafından ve PowerShell'den bağımsız olarak işleme tabi tutulmuş olur. Örneğin, SSH hizmetini ortak anahtar kimlik doğrulaması ve ek güvenlik için tek bir parola gerektirecek şekilde yapılandırabilirsiniz. Çok faktörlü kimlik doğrulaması yapılandırması bu belgelerin kapsamı dışındadır. Çok faktörlü kimlik doğrulamasını doğru yapılandırma ve PowerShell uzaktan iletişim ile kullanmaya çalışmadan önce 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 anlama gelir: Yöneticiler yükseltilmiş bir kabuk erişimine sahiptir ve normal kullanıcılar erişime sahip olmaz.
PowerShellmoting örneği
Moting testinin en kolay yolu, bunu tek bir bilgisayarda denemektir. Bu örnekte, aynı Linux bilgisayarına geri bir uzak oturum oluşturuz. PowerShell cmdlet'lerini etkileşimli olarak kullanıyoruz, bu nedenle SSH'den ana bilgisayarı doğrulamayı isteyen ve parola isteyen istemler görüyoruz. Aynı şeyi bir bilgisayar üzerinde de Windows emin olmak için de bu şekilde çalışabilirsiniz. Ardından, ana bilgisayar adını değiştirerek bilgisayarlar arasında uzaktan.
# Linux to Linux
#
$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' cannot 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 powershell }
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName PSComputerName
------- ------ ----- ----- ------ -- -- ----------- --------------
0 0 0 19 3.23 10635 635 powershell UbuntuVM1
0 0 0 21 4.92 11033 017 powershell UbuntuVM1
0 0 0 20 3.07 11076 076 powershell UbuntuVM1
#
# Linux to 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]
#
# Windows to 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>
Sınırlamalar
Sudo komutu Bir Linux bilgisayarına uzak oturumda çalışmıyor.
SSH üzerinden PSRemoting, Profilleri desteklemez ve erişimine sahip
$PROFILEdeğildir. Oturuma katıldıktan sonra, profili tam dosya yoluyla nokta kaynak olarak kullanarak bir profil yükleyebilirsiniz. Bu, SSH profilleriyle ilgili değildir. SSH sunucusunu varsayılan kabuk olarak PowerShell'i kullanmak ve SSH aracılığıyla bir profil yüklemek için yapılandırabilirsiniz. Daha fazla bilgi için SSH belgelerine bakın.PowerShell 7.1'den önce SSH üzerinden uzaktan uzaktan bağlantı ikinci atlama uzak oturumlarını desteklemedi. Bu özellik WinRM kullanan oturumlar ile sınırlıydı. PowerShell 7.1, herhangi
Enter-PSSessionbirEnter-PSHostProcessetkileşimli uzak oturumun içinde ve ile çalışmasına olanak sağlar.