PowerShell Uzaktan İletişimine Başlarken
PowerShell Uzaktan İletişim, PowerShell dilinin ilk günlerinden beri mevcuttur ve uzak sistemler arasında komutların çalıştırılmasına ve çıktı alınmasına olanak tanır. Geleneksel olarak PowerShell Uzaktan İletişim WinRM üzerine kurulmuştur, ancak daha yeni PowerShell sürümleriyle SSH protokolü artık Linux sistemleri arasında uzaktan iletişimi de kolaylaştırmak için kullanılabilir. Bu makalede, PowerShell 5,1 ve üzeri sürümlere odaklanarak PowerShell uzaktan iletişimine nasıl başlayacağınızı öğreneceksiniz.
Gereksinimler ve Kurulum
Halen yaygın olarak kullanılan üç modern PowerShell çeşidi vardır. Bu, uzun vadeli bir sürüm (LTS) ve en güncel sürüm olduğundan PowerShell 7'ye geçmeniz önemle tavsiye edilir. Ancak bunun henüz mümkün olmadığı durumlar da var.
PowerShell 5.1
Bu, Windows işletim sistemiyle birlikte gelen Windows PowerShell'in son sürümüdür. Hala çok sayıda şirket tarafından kullanılan bu yöntemin, işe uzaktan erişim için bazı basit gereklilikler vardır.
- .NET 4.6.2, Windows Server 2016'da önceden yüklenmiş olarak gelir
- Windows Server 2016 ve üzeri için kutuda gönderilir
Önceki sürümler Microsoft tarafından kullanım ömrünün sonu olarak kabul edildiğinden, bu makalede Windows Server 2016'ya odaklanacağız.
Windows PowerShell'in varsayılan olarak bir microsoft.powershell oturum uç noktası oluşturacağını unutmayın. Enter-PSSession ve New-PSSession, başka bir oturum uç noktası belirtilmediğinde bu uç noktayı kullanacaktır. PowerShell'in daha yeni sürümleri bu uç noktayı oluşturmadığından veya geçersiz kılmadığı için, Windows PowerShell'e bağlanılmıyorsa doğru uzak örneğe bağlanmak için uç nokta adının belirtilmesi gerekir. Varsayılan Windows PowerShell yapılandırmasının bir örneği aşağıdadır (Şekil 1).
Şekil 1: Varsayılan Windows PowerShell yapılandırması
PowerShell Çekirdeği (6.x)
PowerShell Core, kutudan çıkan gerekli .NET Core dosyalarıyla birlikte gelir. WinRM PowerShell Remoting'in çalışması için gerekli bazı adımlar vardır. PowerShell Core'un ilk sürümlerinde uygun Enable-PSRemoting desteği yoktu ve bu nedenle gerekliydi pwrshplugin.dll dosyasını System32 ve bitiş noktalarını kaydedin. PowerShell Core'un en son nokta sürümlerinde, Enable-PSRemoting düzgün şekilde çalışıyor DLL'yi ve sürüme özel uç noktaları kaydedin (şekil 2'de görüldüğü gibi).
Enable-PSRemoting'i çalıştırdıktan sonra, sürüme özel doğru uç noktalar kaydedilir, bu durumda 6.2.5 (şekil 3).
Şekil 2: PowerShell Core'da WinRM PowerShell Uzaktan İletişimini Etkinleştirme
Şekil 3: PowerShell Core için sürüme özel uç noktalar
-SkipNetworkProfileCheck parametresinin belirtilmesinin nedeni, herhangi bir Public ağının Enable-PSRemoting komutunu erken sonlandırmasıdır. Bunun sonuçlarının ve uygun kontrolünün farkında olduğunuz sürece, bu komutu çalıştırmak güvenlidir.
PowerShell 7
PowerShell'in en son sürümü de benzer şekilde Install-PowerShellRemoting.ps1 'i gerektirmez. komut dosyası artık Enable-PSRemoting olarak aşağıdaki şekilde görüldüğü gibi gereken her şeyi kaydeder 4'te, Enable-PSRemoting'i çalıştırarak.
Şekil 4: PowerShell 7'deki Enable-PSRemoting cmdlet'inin çıktısı
Daha sonra uzaktan iletişime izin vermek üzere kaydedilen uç nokta adları, bu durumda 7.0.1 olan en son PowerShell sürümüne özeldir. (bkz. şekil 5).
Şekil 5: PowerShell 7 ile uzaktan iletişim için kayıtlı uç nokta adlarının listesi
SSH Uzaktan İletişim Gereksinimleri
PowerShell Core ve PowerShell 7'de artık SSH'yi uç nokta olarak kullanma olanağı mevcut. SSH uzaktan iletişiminin çalışması için gerekli birkaç gereksinim ve adım vardır.
- PowerShell Core 6.x veya PowerShell 7.x
- ssh.exe (istemci) ve sshd.exe (sunucu)
- Yerleşik SSH (istemci) için Windows 10 build 1809 ve Windows Server 2019
SSH Uç Noktalarını Kurun
PowerShell'i SSH kullanacak şekilde ayarlamak aşağıdaki adımları ve yapılandırmaları gerektirir.
- Windows için OpenSSH, doğrudan Windows 10'da (1809 veya üzeri) ve Windows Server 2019'da isteğe bağlı bir özellik olarak mevcuttur (Windows 10'a ve Windows Server'a nasıl kurulacağına ilişkin talimatlar için Thomas Maurer'in Blogunu ziyaret edin)
- Linux'ta platformunuza bağlı olarak OpenSSH'yi kurabilirsiniz
Gerekli yetenekleri (OpenSSH.Client zaten yüklenmiş olabilir), hizmet yapılandırmasını ve güvenlik duvarı kurallarını yüklemek için aşağıdaki komutları çalıştırın.
# Install the OpenSSH Client and Server
Add-WindowsCapability -Online -Name 'OpenSSH.Client~~~~0.0.1.0'
Add-WindowsCapability -Online -Name 'OpenSSH.Server~~~~0.0.1.0'
# Initial Configuration of SSH Server
Start-Service -Name 'sshd'
Set-Service -Name 'sshd' -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup.
Get-NetFirewallRule -Name '*ssh*' | Format-Table -AutoSize
# There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22Son olarak SSH sunucusunun PowerShell uzaktan iletişimi ile çalışabilmesi için alt sistemin doğru şekilde ayarlanması gerekir.
notepad $Env:ProgramData\ssh\sshd_config# Make sure that the subsystem line goes after the existing SFTP subsystem line
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo -NoProfile
# Change c:/progra~1/powershell/7/pwsh.exe to c:/progra~1/powershell/6/pwsh.exe for PowerShell Core
PasswordAuthentication yes
# Below is optional but recommended to allow use of public/private keys
PubkeyAuthentication yesSon olarak SSH sunucusunu yeniden başlatın:
Restart-Service -Name 'sshd'Windows'un içerdiği OpenSSH sunucu sürümünde bir hata var. Herhangi bir dosya yolu için 8.3 kısa adın kullanılmasını gerektirir, dolayısıyla c:/progra~1. Doğru 8.3 kısa adını kullandığınızı doğrulamak için, bunu Program Dosyaları (PowerShell 6 veya 7'nin yüklü olduğu yer) için almak üzere aşağıdaki komutu kullanabilirsiniz:
Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileNamePowerShell Uzaktan İletişimi için Örnek Komutlar
Peki PowerShell Uzaktan İletişim ile neler yapabilirsiniz ve nasıl faydalı hale gelir? Çoğu zaman bir sistem yöneticisinin, bir sorunu çözmek veya yeni bir paket dağıtmak için çeşitli sistemlerden bilgi toplaması veya birçok sistem üzerinde aynı anda komut çalıştırması gerekir. PowerShell Uzaktan İletişim ile bu kolayca yapılabilir.
Bilgi toplamak
Aşağıdaki senaryoda bir PowerShell 7 uzak uç noktasına uzaktan bağlanalım ve çalışan hizmetleri alalım.
$Params = @{
"ComputerName" = 'Host1'
"ConfigurationName" = 'PowerShell.7'
"ScriptBlock" = {
Get-Service | Where-Object Status -EQ 'Running' | Format-Table -AutoSize
}
}
Invoke-Command @ParamsBir Komut Çalıştırmak
Belki bir hizmeti, bu durumda Yazdırma Biriktiricisini yeniden başlatmamız gerekebilir.
$Params = @{
"ComputerName" = 'Host1'
"ConfigurationName" = 'PowerShell.7'
"ScriptBlock" = {
Get-Service -Name 'Spooler' | Restart-Service
}
}
Invoke-Command @ParamsÇözüm
PowerShell Remoting güçlü bir araçtır ve platformlar arası yeteneklerin eklenmesi ve isteğe bağlı SSH bağlantılarının kullanılmasıyla sistem yöneticileri için daha da esnek ve önemli bir araç haline gelir.





