SSH Üzerinden PowerShell Uzaktan İletişimini Kullanma


Klasik Windows PowerShell sürümlerinde (5.1'e kadar), PSRemoting kullanarak uzak bilgisayarlara erişmek için yalnızca WinRM protokolünü (WSMan, bağlantı noktası 5985/5986) kullanabilirsiniz. PowerShell Core 7.x ve 6.x'in daha yeni platformlar arası sürümlerinde, bilgisayarlar arasında PowerShell uzaktan iletişimi için SSH kullanabilirsiniz. Windows, Linux veya macOS ana bilgisayarlarına bağlanmak için SSH üzerinden PSRemoting'i yapılandırmayı deneyelim.

Windows'ta SSH PowerShell Uzaktan İletişimini Etkinleştirin

PowerShell Remoting'i etkinleştirmek için Windows istemci tarafında bir SSH sunucusunun nasıl yapılandırılacağını görelim.

Öncelikle, Windows 10 (sürüm 1809 veya daha yenisi) ve Windows Server 2019'da yerleşik OpenSSH sunucusunu etkinleştirin. SSH sunucusunu aşağıdaki komutla kurun (Windows 10 veya 11'de):

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Ayrıca, en son PowerShell Core sürümünü yükleyin:

iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

Ardından, hizmet yönetimi PowerShell cmdlet'lerini kullanarak sshd hizmeti için otomatik başlatmayı etkinleştirin:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

Windows'un şu anda TCP/22 (SSH) bağlantı noktasını dinlediğinden emin olun:

Get-NetTCPConnection -State Listen|where {$_.localport -eq '22'}

Windows Defender Güvenlik Duvarı'nda gelen SSH bağlantılarına izin verin:

Enable-NetFirewallRule -Name *OpenSSH-Server*

Ardından C:\ProgramData\ssh\sshd_config yapılandırma dosyasını açın:

notepad $Env:ProgramData\ssh\sshd_config

Aşağıdaki satırın açıklamasını kaldırarak SSH parola doğrulamasını etkinleştirin:

PasswordAuthentication yes

Anahtarları kullanarak da SSH erişimine izin verebilirsiniz:

PubkeyAuthentication yes

Aşağıdaki satırı dosyaya ekleyin. Uzak SSH bağlantıları için pwsh.exe yorumlayıcısını çalıştıracaktır:

Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo

sshd_config dosyasını kaydedin ve sshd hizmetini yeniden başlatın:

restart-service sshd

Linux'ta PowerShell SSH Uzaktan İletişimi Nasıl Etkinleştirilir?

Şimdi SSH üzerinden PowerShell Remoting için bir Linux ana bilgisayarının nasıl yapılandırılacağını görelim.

PowerShell Core'u bu kılavuza göre Linux dağıtımınıza kurun. Ubuntu 20.04 ana bilgisayarım için aşağıdaki komutları kullanıyorum:

$ sudo apt-get update -y
$ wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt-get update
$ sudo apt-get install powershell -y

Bir OpenSSH sunucusu kurun (kurulu değilse):

$ sudo apt install openssh-server

Aşağıdaki satırları /etc/ssh/sshd_config dosyasına ekleyin:

PasswordAuthentication yes
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo

ssh hizmetini yeniden başlatın:

sudo systemctl restart sshd.service

Örneklerle SSH Üzerinden PSRemoting

Artık SSH üzerinden PowerShell kullanarak yapılandırılmış bir Windows veya Linux ana bilgisayarına bağlanabilirsiniz. Uzak bilgisayarlara SSH üzerinden erişmek için WinRM ile aynı cmdlet'ler kullanılır:

  • New-PSSession
  • Enter-PSSession

    - uzak bir ana bilgisayarla etkileşimli bir PowerShell oturumu oluşturmak için

  • Invoke-Command

    - komutları veya PS1 komut dosyalarını uzaktan çalıştırmak için

Varsayılan olarak, bu cmdlet'ler uzak bilgisayarlara bağlanmak için WinRM'yi kullanmaya çalışıyor. SSH aktarımını kullanmak için diğer bağlantı seçeneklerini kullanmalısınız (PowerShell Core'da bulunur, bu nedenle bunları

 pwsh.exe

çabuk).

-HostName (-ComputerName yerine) ve -UserName (-Credential yerine) seçenekleri, SSH bağlantısı için bilgisayar adını ve kullanıcıyı ayarlamanıza olanak tanır. -KeyFilePath parametresini kullanarak, kimlik doğrulama için SSH anahtarları belirleyebilirsiniz (isteğe bağlı). PowerShell trafiği için SSH aktarımlarını açıkça etkinleştirmek üzere -SSHTransport parametresini de kullanabilirsiniz.

Yerleşik SSH istemcisini kullanarak uzak bir bilgisayara etkileşimli olarak Windows'tan bağlanmayı deneyelim:

Enter-PSSession -HostName 192.168.50.20 -UserName maxbak

Bağlanmak için bir sunucunun SSH parmak izini onaylamak ve uzaktan bağlanmasına izin verilen kullanıcının şifresini girmek yeterlidir.

Uzak bilgisayarlara birden çok kalıcı PowerShell oturumu oluşturabilir ve bunlar üzerinde SSH üzerinden komutlar yürütebilirsiniz:

$session1 = New-PSSession -HostName 192.168.50.20 -UserName maxbak -SSHTransport
$session2 = New-PSSession -HostName 192.168.54.44 -UserName root -SSHTransport

Aynı anda birden çok bilgisayarda komut çalıştırmak için aşağıdaki komutu kullanın:

Invoke-Command -Session $session1, $session2 -ScriptBlock { $PSVersionTable| select OS, PSVersion}| Select-Object PSComputerName, PSVersion, OS

Bu örnekte, komutu hem Windows hem de Linux bilgisayarda çalıştırdık ve çıktıyı konsolda görüntüledik.

PowerShell Core 7.1 ve daha yeni sürümlerde PSRemoting, mevcut bir oturumdan başka bir uzak bilgisayara çift sekmeyi destekler.

Seçenekte birden çok SSH oturumu belirtebilir ve RSA anahtarlarını kullanarak kimlik doğrulaması yapabilirsiniz:

$sshConnections = @{HostName="winsrv1"; UserName="a-d\maxbak"; KeyFilePath="c:\users\maxbak\id_rsa" }, @{ HostName="root@ubunsrv1"; KeyFilePath="c:\vault\ubunsrv1_id_rsa" }
New-PSSession -SSHConnection $sshConnections

SSH üzerinden PowerShell Remoting'in temel sınırlamaları:

  • PowerShell profilleri desteklenmez;

  • Linux ana bilgisayarlarıyla yapılan uzak oturumlarda sudo desteklenmez (çalıştırıldığında aşağıdaki hata görünür:

    sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper

    );

  • Yeterince Yönetim (JEA) desteklenmez.

Gördüğünüz gibi, PowerShell Remoting'i SSH aracılığıyla yapılandırmak, WinRM HTTPS'ye göre çok daha kolaydır. Ayrıca, bir çalışma grubundaki bilgisayarları TrustedHost'a eklemeden PowerShell kullanarak bağlanmak için bu bağlantı yöntemini kullanabilirsiniz.

PowerShell Remoting over SSH, WinRM'ye güvenli ve basit bir alternatiftir. SSH üzerinden PSremoting, herhangi bir platformda (Windows, Linux, macOS), açılacak herhangi bir ek bağlantı noktasında (TCP/22 SSH hariç) desteklenir ve yapılandırılması kolaydır.

İlgili makaleler