SSH Üzerinden PowerShell Uzaktan İletişimi


Genel Bakış

PowerShell uzaktan iletişimi normalde bağlantı anlaşması ve veri aktarımı için WinRM'yi kullanır. SSH artık Linux ve Windows platformlarında mevcut ve gerçek çok platformlu PowerShell uzaktan iletişimine olanak tanıyor.

WinRM, PowerShell uzaktan 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 Yeterince Yönetim'i (JEA) desteklememektedir.

SSH uzaktan iletişimi, Windows ve Linux bilgisayarlar arasında temel PowerShell oturumu uzaktan iletişimi yapmanıza olanak tanır. SSH uzaktan iletişimi, hedef bilgisayarda bir 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 bir genel barındırma modeli uygulayacağız.

New-PSSession, Enter-PSSession ve Invoke-Command cmdlet'leri 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 bir oturum oluşturmak için hedef bilgisayarı Ana BilgisayarAdı parametresiyle belirtirsiniz ve kullanıcı adını KullanıcıAdı ile sağlarsınız. Cmdlet'leri etkileşimli olarak çalıştırırken sizden bir parola istenir. KeyFilePath parametresine sahip ö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

Tüm bilgisayarlarda PowerShell 6 veya üzeri ve SSH yüklü olmalıdır. 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 build 1809 ve Windows Server 2019'da mevcuttur. Daha fazla bilgi için bkz. OpenSSH ile Windows'u Yönetme. Linux için, platformunuza uygun olan sshd sunucusu da dahil olmak üzere SSH'yi yükleyin. SSH uzaktan iletişim özelliğini edinmek için GitHub'dan PowerShell'i de yüklemeniz gerekir. SSH sunucusunun, uzak bilgisayarda bir PowerShell işlemini barındırmak için bir SSH alt sistemi oluşturacak şekilde yapılandırılması gerekir. Ayrıca şifre veya anahtar tabanlı kimlik doğrulamayı etkinleştirmeniz gerekir.

SSH hizmetini Windows bilgisayara yükleyin

  1. PowerShell'in en son sürümünü yükleyin. Daha fazla bilgi için bkz. Windows'ta PowerShell'i yükleme.

    New-PSSession parametre kümelerini listeleyerek PowerShell'in SSH uzaktan iletişim desteğine sahip olduğunu doğrulayabilirsiniz. SSH ile başlayan parametre kümesi adlarının olduğunu fark edeceksiniz. Bu parametre kümeleri SSH parametrelerini içerir.

    (Get-Command New-PSSession).ParameterSets.Name
    
    Name
    ----
    SSHHost
    SSHHostHashParam
    
  2. En son Win32 OpenSSH'yi yükleyin. Kurulum talimatları için bkz. OpenSSH'yi kullanmaya başlama.

    Not

    PowerShell'i OpenSSH için varsayılan kabuk olarak ayarlamak istiyorsanız bkz. Windows'u OpenSSH için Yapılandırma.

  3. $env:ProgramData\ssh konumunda bulunan sshd_config dosyasını 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'ten başlayarak, PowerShell'i SSH sunucu modunda çalıştırırken artık -nologo parametresini kullanmanıza gerek yok.

    Not

    PowerShell yürütülebilir dosyasının varsayılan konumu c:/progra~1/powershell/7/pwsh.exe'dir. 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, alt sistem çalıştırılabilir yollarındaki alanların çalışmasını engelleyen bir hata var. Daha fazla bilgi için bu GitHub sorununa bakın.

    Windows'ta Program Files klasörünün 8.3 kısa adı genellikle Progra~1'dir. 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.

  4. sshd hizmetini yeniden başlatın.

    Restart-Service sshd
    
  5. OpenSSH'nin kurulu olduğu yolu Path ortam değişkeninize ekleyin. Örneğin, C:\Program Files\OpenSSH\. Bu giriş ssh.exe dosyasının bulunmasını sağlar.

SSH hizmetini bir Ubuntu Linux bilgisayarına yükleyin

  1. PowerShell'in en son sürümünü yükleyin, bkz. Ubuntu'da PowerShell'i Yükleme.

  2. Ubuntu OpenSSH Sunucusunu yükleyin.

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. sshd_config dosyasını /etc/ssh konumunda 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 ssh-keygen kılavuz sayfasına bakın.

    PowerShell alt sistemi girişi ekleyin:

    Subsystem powershell /usr/bin/pwsh -sshs -nologo
    

    Not

    PowerShell yürütülebilir dosyasının varsayılan konumu /usr/bin/pwsh'dır. Konum, PowerShell'i nasıl yüklediğinize bağlı olarak değişebilir.

    Not

    PowerShell 7.4'ten başlayarak, PowerShell'i SSH sunucu modunda çalıştırırken artık -nologo parametresini kullanmanıza gerek yok.

  4. ssh hizmetini yeniden başlatın.

    sudo systemctl restart sshd.service
    

SSH hizmetini bir macOS bilgisayara yükleme

  1. 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ı izleyerek SSH Uzaktan İletişimin etkinleştirildiğinden emin olun:

    1. Sistem Ayarları'nı açın.
    2. Genel'e tıklayın
    3. Paylaşım'ı tıklayın.
    4. Uzaktan Giriş: Açık'ı ayarlamak için Uzaktan Giriş'i işaretleyin.
    5. Uygun kullanıcılara erişime izin verin.
  2. sshd_config dosyasını /private/etc/ssh/sshd_config konumunda düzenleyin.

    nano gibi bir metin düzenleyici 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 girişi ekleyin:

    Subsystem powershell /usr/local/bin/pwsh -sshs -nologo
    

    Not

    PowerShell yürütülebilir dosyasının varsayılan konumu /usr/local/bin/pwsh şeklindedir. Konum, PowerShell'i nasıl yüklediğinize bağlı olarak değişebilir.

    Not

    PowerShell 7.4'ten başlayarak, PowerShell'i SSH sunucu modunda çalıştırırken artık -nologo parametresini kullanmanıza gerek yok.

    İsteğe bağlı olarak anahtar kimlik doğrulamasını etkinleştirin:

    PubkeyAuthentication yes
    
  3. 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ükseltme sonrasında yapılandırma dosyasını kontrol ettiğinizden emin olun.

Kimlik doğrulama

SSH üzerinden PowerShell uzaktan iletişimi, SSH istemcisi ile SSH hizmeti arasındaki kimlik doğrulama alışverişine dayanır ve herhangi bir kimlik doğrulama şemasını kendisi uygulamaz. Sonuç olarak, çok faktörlü kimlik doğrulama da dahil olmak üzere yapılandırılmış tüm kimlik doğrulama şemaları SSH tarafından ve PowerShell'den bağımsız olarak yönetilir. Örneğin, SSH hizmetini, ek güvenlik için ortak anahtar kimlik doğrulaması ve tek kullanımlık parola gerektirecek şekilde yapılandırabilirsiniz. Çok faktörlü kimlik doğrulamanın yapılandırılması bu belgenin kapsamı dışındadır. Çok faktörlü kimlik doğrulamanın nasıl doğru şekilde yapılandırılacağı ve PowerShell uzaktan iletişimi ile kullanmaya çalışmadan önce SSH'nin PowerShell dışında çalıştığının nasıl doğrulanacağı hakkında SSH belgelerine bakın.

Not

Kullanıcılar uzak oturumlarda aynı ayrıcalıklara sahiptir. Anlamı, Yöneticilerin yükseltilmiş bir kabuğa erişimi vardır, ancak normal kullanıcıların 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 bilgisayarına uzaktan bir oturum oluşturuyoruz. PowerShell cmdlet'lerini etkileşimli olarak kullanıyoruz, bu nedenle SSH'den ana bilgisayarı doğrulamayı isteyen ve parola isteyen istemleri görüyoruz. Uzaktan kumandanın çalıştığından emin olmak için aynı şeyi bir Windows bilgisayarda da yapabilirsiniz. Daha sonra ana bilgisayar adını değiştirerek bilgisayarlar arasında uzaktan kumanda edin.

Linux'tan 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'tan 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'tan 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, bir Linux bilgisayarındaki uzak oturumda çalışmaz.

  • SSH üzerinden PSRemoting, Profilleri desteklemez ve $PROFILE'a erişimi yoktur. Bir oturumda, profile tam dosya yolu ile nokta kaynak sağlayarak bir profil yükleyebilirsiniz. Bu SSH profilleriyle ilgili değil. SSH sunucusunu, PowerShell'i varsayılan kabuk olarak kullanacak ve SSH aracılığıyla profil yükleyecek ş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 yetenek WinRM kullanan oturumlarla sınırlıydı. PowerShell 7.1, Enter-PSSession ve Enter-PSHostProcess'in herhangi bir etkileşimli uzak oturumdan çalışmasına olanak tanır.

Ayrıca bakınız

  • PowerShell'i Linux'a Kurmak
  • PowerShell'i macOS'a yükleme
  • PowerShell'i Windows'a yükleme
  • Windows'u OpenSSH ile yönetin
  • OpenSSH Anahtarlarını Yönetme
  • Ubuntu SSH'si

İlgili makaleler