Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gambaran Umum
PowerShell remoting biasanya menggunakan WinRM untuk negosiasi koneksi dan pengangkutan data. SSH kini tersedia untuk platform Linux dan Windows serta memungkinkan penggunaan PowerShell jarak jauh multiplatform yang sebenarnya.
WinRM menyediakan model hosting yang kuat untuk sesi jarak jauh PowerShell. Remoting berbasis SSH saat ini tidak mendukung konfigurasi endpoint jarak jauh dan Administrasi Secukupnya (JEA).
Jarak jauh SSH memungkinkan Anda melakukan sesi remoting dasar PowerShell antara komputer Windows dan Linux. Penyambungan SSH menginisiasi proses host PowerShell di komputer target sebagai subsistem SSH. Akhirnya kita akan menerapkan model hosting umum, mirip dengan WinRM, untuk mendukung konfigurasi titik akhir dan JEA.
Cmdlet New-PSSession
, Enter-PSSession
, dan Invoke-Command
sekarang memiliki parameter baru yang diatur untuk mendukung koneksi jarak jauh baru ini.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Untuk membuat sesi jarak jauh, Anda menentukan komputer target dengan parameter HostName dan memberikan nama pengguna dengan UserName. Saat menjalankan cmdlet secara interaktif, Anda akan dimintai kata sandi. Anda juga dapat menggunakan autentikasi kunci SSH menggunakan file kunci privat dengan parameter KeyFilePath. Membuat kunci untuk autentikasi SSH bervariasi menurut platform.
Informasi penyiapan umum
PowerShell 6 atau lebih tinggi, dan SSH harus diinstal di semua komputer. Instal klien SSH (ssh.exe
) dan server (sshd.exe
) sehingga Anda dapat jarak jauh ke dan dari komputer. OpenSSH untuk Windows sekarang tersedia di Windows 10 build 1809 dan Windows Server 2019. Untuk informasi selengkapnya, lihat Mengelola Windows dengan OpenSSH. Untuk Linux, instal SSH, termasuk server sshd, yang sesuai untuk platform Anda. Anda juga perlu menginstal PowerShell dari GitHub untuk mendapatkan fitur jarak jauh SSH.
Server SSH harus dikonfigurasi untuk membuat subsistem SSH untuk menghosting proses PowerShell di komputer jarak jauh. Dan, Anda harus mengaktifkan kata sandi atau autentikasi berbasis kunci.
Menginstal layanan SSH di komputer Windows
Instal PowerShell versi terbaru. Untuk informasi selengkapnya, lihat Menginstal PowerShell di Windows.
Anda dapat mengonfirmasi bahwa PowerShell memiliki dukungan SSH untuk akses jarak jauh dengan mencantumkan set parameter
New-PSSession
. Anda akan melihat ada nama set parameter yang dimulai dengan SSH. Kumpulan parameter tersebut mencakup parameter SSH.(Get-Command New-PSSession).ParameterSets.Name
Name ---- SSHHost SSHHostHashParam
Instal Win32 OpenSSH terbaru. Untuk petunjuk penginstalan, lihat Memulai OpenSSH.
Nota
Jika Anda ingin mengatur PowerShell sebagai shell default untuk OpenSSH, lihat Mengonfigurasi Windows untuk OpenSSH.
Edit file
sshd_config
yang terletak di$Env:ProgramData\ssh
.Pastikan autentikasi kata sandi diaktifkan:
PasswordAuthentication yes
Buat subsistem SSH yang menghosting proses PowerShell di komputer jarak jauh:
Subsystem powershell C:/progra~1/powershell/7/pwsh.exe -sshs
Nota
Ada bug di OpenSSH untuk Windows yang mencegah Anda menggunakan jalur dengan spasi untuk program subsistem yang dapat dieksekusi. Ada dua cara untuk mengatasi masalah ini:
- Gunakan nama pendek bergaya Windows 8.3 untuk jalur yang dapat dieksekusi PowerShell
- Membuat tautan simbolis ke executable PowerShell yang menghasilkan jalur tanpa spasi
Untuk informasi selengkapnya, lihat masalah #784 di repositori PowerShell/Win32-OpenSSH.
Anda hanya perlu mendapatkan nama gaya 8.3 untuk segmen jalur yang memiliki spasi. Secara default PowerShell 7 diinstal di
C:\Program Files\PowerShell\7\
. Nama bergaya 8.3 untukProgram Files
seharusnyaprogra~1
. Anda dapat menggunakan perintah berikut untuk memverifikasi nama:Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileName
Nama 8.3 adalah fitur warisan dari sistem file NTFS yang dapat dinonaktifkan. Fitur ini harus diaktifkan untuk volume tempat PowerShell diinstal.
Atau, Anda dapat membuat tautan simbolis ke executable PowerShell yang menghasilkan jalur tanpa spasi. Metode ini lebih disukai karena memungkinkan Anda memperbarui tautan jika jalur ke program PowerShell yang dapat dijalankan berubah suatu saat, tanpa perlu memperbarui file Anda
sshd_config
.Gunakan perintah berikut untuk membuat tautan simbolis ke executable:
$newItemSplat = @{ ItemType = 'SymbolicLink' Path = 'C:\ProgramData\ssh\' Name = 'pwsh.exe' Value = (Get-Command pwsh.exe).Source } New-Item @newItemSplat
Perintah ini membuat tautan simbolis di direktori yang sama yang digunakan oleh server OpenSSH untuk menyimpan kunci host dan konfigurasi lainnya.
Secara opsional, aktifkan autentikasi kunci:
PubkeyAuthentication yes
Untuk informasi selengkapnya, lihat Mengelola Kunci OpenSSH.
Mulai ulang layanan sshd.
Restart-Service sshd
Tambahkan jalur tempat OpenSSH diinstal ke variabel lingkungan PATH Anda. Contohnya,
C:\Program Files\OpenSSH\
. Entri ini memungkinkanssh.exe
ditemukan.
Menginstal layanan SSH di komputer Linux Ubuntu
Instal PowerShell versi terbaru, lihat Menginstal PowerShell di Ubuntu.
Instal Ubuntu OpenSSH Server.
sudo apt install openssh-client sudo apt install openssh-server
Edit file
sshd_config
di lokasi/etc/ssh
.Pastikan autentikasi kata sandi diaktifkan:
PasswordAuthentication yes
Secara opsional, aktifkan autentikasi kunci:
PubkeyAuthentication yes
Untuk informasi selengkapnya tentang membuat kunci SSH di Ubuntu, lihat halaman manual untuk ssh-keygen.
Tambahkan entri subsistem PowerShell:
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
Nota
Lokasi default executable PowerShell adalah
/usr/bin/pwsh
. Lokasi dapat bervariasi tergantung pada cara Anda menginstal PowerShell.
Mulai ulang layanan ssh.
sudo systemctl restart sshd.service
Menginstal layanan SSH di komputer macOS
Instal PowerShell versi terbaru. Untuk informasi selengkapnya, Menginstal PowerShell di macOS.
Pastikan SSH Remoting diaktifkan dengan mengikuti langkah-langkah berikut:
- Buka
System Settings
. - Klik pada
General
- Klik pada
Sharing
. - Periksa
Remote Login
untuk mengaturRemote Login: On
. - Izinkan akses ke pengguna yang sesuai.
- Buka
Edit file
sshd_config
di lokasi/private/etc/ssh/sshd_config
.Gunakan editor teks seperti nano:
sudo nano /private/etc/ssh/sshd_config
Pastikan autentikasi kata sandi diaktifkan:
PasswordAuthentication yes
Tambahkan entri subsistem PowerShell:
Subsystem powershell /usr/local/bin/pwsh -sshs -NoLogo
Nota
Lokasi default executable PowerShell adalah
/usr/local/bin/pwsh
. Lokasi dapat bervariasi tergantung pada cara Anda menginstal PowerShell.Secara opsional, aktifkan autentikasi kunci:
PubkeyAuthentication yes
Mulai ulang layanan sshd.
sudo launchctl stop com.openssh.sshd sudo launchctl start com.openssh.sshd
Nota
Ketika Anda memperbarui sistem operasi Anda, file konfigurasi SSH mungkin ditimpa. Pastikan Anda memeriksa file konfigurasi setelah peningkatan.
Otentikasi
PowerShell remote melalui SSH bergantung pada pertukaran autentikasi antara klien SSH dan layanan SSH serta tidak menerapkan skema autentikasi apa pun secara langsung. Hasilnya adalah bahwa setiap skema autentikasi yang dikonfigurasi termasuk autentikasi multifaktor ditangani oleh SSH dan independen dari PowerShell. Misalnya, Anda dapat mengonfigurasi layanan SSH untuk memerlukan autentikasi kunci publik dan kata sandi satu kali untuk keamanan tambahan. Konfigurasi autentikasi multifaktor berada di luar cakupan dokumentasi ini. Lihat dokumentasi untuk SSH tentang cara mengonfigurasi autentikasi multifaktor dengan benar dan memvalidasinya berfungsi di luar PowerShell sebelum mencoba menggunakannya dengan PowerShell jarak jauh.
Nota
Pengguna mempertahankan hak istimewa yang sama dalam sesi jarak jauh. Artinya, Administrator memiliki akses ke shell tingkat tinggi, sedangkan pengguna normal tidak.
Contoh pengendalian jarak jauh PowerShell
Cara term mudah untuk menguji jarak jauh adalah dengan mencobanya pada satu komputer. Dalam contoh ini, kami membuat sesi jarak jauh kembali ke komputer Linux yang sama. Kami menggunakan cmdlet PowerShell secara interaktif sehingga kami melihat perintah dari SSH yang meminta untuk memverifikasi komputer host dan meminta kata sandi. Anda dapat melakukan hal yang sama pada komputer yang menjalankan Windows untuk memastikan pengendalian jarak jauh berfungsi. Kemudian, mengakses komputer secara jarak jauh dengan mengubah nama host.
Linux ke Linux
$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 ke 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 ke 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>
Keterbatasan
Perintah sudo tidak berfungsi dalam sesi jarak jauh ke komputer Linux.
PSRemoting melalui SSH tidak mendukung Profil dan tidak memiliki akses ke
$PROFILE
. Setelah dalam sesi, Anda dapat memuat profil dengan melakukan sumber profil dengan jalur file lengkap. Ini tidak terkait dengan profil SSH. Anda dapat mengonfigurasi server SSH untuk menggunakan PowerShell sebagai shell default dan memuat profil melalui SSH. Lihat dokumentasi SSH untuk informasi selengkapnya.Sebelum PowerShell 7.1, pengerjaan jarak jauh melalui SSH tidak mendukung sesi jarak jauh lintas kedua. Kemampuan ini terbatas pada sesi menggunakan WinRM. PowerShell 7.1 memungkinkan
Enter-PSSession
danEnter-PSHostProcess
bekerja dari dalam sesi jarak jauh interaktif apa pun.