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

  1. 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-PSSession onaylayı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.Name
    
    Name
    ----
    SSHHost
    SSHHostHashParam
    
  2. En 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.

  3. dosyasında sshd_config bulunan dosyasını $env:ProgramData\ssh düzenleyin.

    Parola kimlik doğrulamasının etkinleştirildiğinden emin olun:

    PasswordAuthentication yes
    

    Uzak bilgisayarda bir PowerShell işlemi barındıran SSH alt sistemi oluşturun:

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

    Not

    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 Files kısa Windows Progra~1 olur. 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 yük olduğu yolu Yol ortam değişkeninize ekleyin. Örneğin, C:\Program Files\OpenSSH\. Bu girdi, girişinin ssh.exe bulunamalarını sağlar.

SSH hizmetini bir Ubuntu Linux yükleme

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

  2. Ubuntu OpenSSH Sunucusunu yükleyin.

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. dosyasını sshd_config konumda /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 ssh-keygen için manpage'e 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 şu /usr/bin/pwsh şekildedir: . Konum, PowerShell'i nasıl yüklemiş olduğunuza bağlı olarak değişebilir.

  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ı izleyin ve SSH Remoting'in etkinleştirildiğinden emin olun:

    1. System Preferences dosyasını açın.
    2. Sharing seçeneğine tıklayın.
    3. ayarlamak Remote Login için kontrol Remote Login: On edin.
    4. Uygun kullanıcılara erişim izni verme.
  2. dosyasını sshd_config konumda /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 girişi ekleyin:

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

    Not

    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 yes
    
  3. sshd 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 $PROFILE değ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-PSSession bir Enter-PSHostProcess etkileşimli uzak oturumun içinde ve ile çalışmasına olanak sağlar.

Ayrıca bkz.

PowerShell’i Linux’a yükleme

PowerShell’i macOS’a yükleme

PowerShell’i Windows’a yükleme

OpenSSH Windows yönetme

OpenSSH Anahtarlarını Yönetme

Ubuntu SSH