−25%

untuk Windows tahunan, hingga 31 Okt. Lihat paket

EQVPS
Mulai

Cara memasang OpenSSH Server di Windows Server 2022 (login dengan kunci, shell PowerShell)

Pasang OpenSSH Server bawaan di VPS Windows Server 2022, jadikan PowerShell sebagai shell bawaan, login dengan kunci sebagai Administrator, dan matikan login kata sandi. Lengkap dengan dua jebakan Windows yang membuat login dengan kunci gagal.

Windows Server 2022 menyertakan OpenSSH Server sebagai fitur opsional: tanpa penginstal pihak ketiga, diperbarui lewat Windows Update. Setelah aktif, Anda bisa menjalankan PowerShell lewat SSH, menyalin file dengan scp, dan mengarahkan skrip atau CI ke server seperti ke mesin Linux mana pun.

Semua langkah di bawah kami lakukan di image Windows Server 2022 kami, dalam PowerShell dengan hak administrator lewat RDP (cara terhubung).

Pertama, jaringan. Di paket Windows dengan NAT, satu-satunya penerusan masuk mengarah ke RDP, jadi SSH tidak bisa dijangkau dari internet. Untuk SSH dari luar Anda memerlukan paket dengan IPv4 sendiri, seperti Windows Small-IP. Jika port bisa dijangkau, langkah-langkah di bawah memakan sekitar lima menit.

1. Pasang OpenSSH Server

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Klien sudah terpasang; server menampilkan NotPresent sampai Anda menambahkannya. Di server kami pemasangan memakan 28 detik.

2. Jalankan dan aktifkan saat boot

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*

Memasang fitur ini membuat aturan firewall OpenSSH-Server-In-TCP (port 22, masuk, diizinkan), jadi Anda tidak perlu menambahkannya sendiri.

3. Jadikan PowerShell shell bawaan

Secara bawaan, sesi SSH masuk ke cmd.exe. Ganti ke PowerShell:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Koneksi baru langsung mendapat PowerShell 5.1; tidak perlu restart.

4. Kunci untuk Administrator: file yang membuat semua orang tersandung

Inilah jebakan Windows yang pertama. Untuk akun di grup Administrators, sshd tidak membaca C:\Users\<name>\.ssh\authorized_keys. Ia membaca satu file bersama, C:\ProgramData\ssh\administrators_authorized_keys, dan hanya jika tidak ada yang bisa menulis ke file itu selain Administrators dan SYSTEM:

$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

-Encoding ascii juga penting. Dalam pengujian kami, kunci yang sama yang disimpan dengan Out-File (UTF-16, bawaan PowerShell 5.1) ditolak dengan Permission denied (publickey). Dari komputer Anda:

ssh Administrator@YOUR.SERVER.IP

Anda seharusnya mendapat prompt PowerShell tanpa kata sandi. Untuk pengguna yang bukan administrator, C:\Users\<name>\.ssh\authorized_keys yang biasa tetap berfungsi.

5. Matikan login kata sandi: jebakan kedua

Perubahan yang paling jelas, PasswordAuthentication no, tidak cukup di versi ini. OpenSSH 8.1 tetap menawarkan keyboard-interactive, yang meminta kata sandi Windows yang sama. Dalam pengujian kami, login tanpa kunci masih menampilkan keyboard-interactive sampai kami mematikannya juga. Selain itu, pengaturannya harus berada sebelum blok Match Group administrators di akhir file, jika tidak hanya berlaku untuk administrator. Perintah ini menaruh kedua baris di paling atas:

$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd

Biarkan sesi SSH Anda saat ini tetap terbuka dan uji dari terminal kedua. Percobaan hanya dengan kata sandi sekarang seharusnya mendapat:

Permission denied (publickey).

Itulah hasil pengujian kami untuk Administrator maupun pengguna biasa, sementara login dengan kunci tetap berfungsi.

Apa yang bisa Anda lakukan

  • Menjalankan perintah dari mana saja: ssh Administrator@IP 'Get-Service sshd'.
  • Menyalin file: scp .\app.zip Administrator@IP:C:/apps/.
  • Membatasi port ke alamat Anda dengan cara yang sama seperti untuk RDP: Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.

Paket yang mana

SSH dari luar membutuhkan IPv4 publik: Windows Small-IP (4 vCPU, 4 GB, 50 GB) seharga $28/bln, Windows Medium-IP (6 vCPU, 6 GB) $36/bln. Windows-nya adalah Server 2022 dengan lisensi Anda sendiri (penjelasan BYOL). Keempat paket ada di halaman Windows VPS. Agar program tetap berjalan setelah Anda memutus koneksi, lihat menjalankan skrip 24/7 di Windows Server.

FAQ

Mengapa SSH di Windows jika sudah ada RDP?

Skrip dan alat berbicara SSH. Dengan OpenSSH di server, Anda menjalankan perintah PowerShell dari mesin Linux atau job CI, menyalin file dengan scp, dan membiarkan otomasi mengelola server tanpa sesi desktop.

Kunci saya berfungsi untuk pengguna biasa, tetapi tidak untuk Administrator. Kenapa?

Untuk anggota grup Administrators, OpenSSH di Windows mengabaikan ~/.ssh/authorized_keys dan membaca C:\ProgramData\ssh\administrators_authorized_keys. File itu hanya boleh bisa ditulis oleh Administrators dan SYSTEM; jika tidak, sshd melewatinya tanpa pemberitahuan.

Bisakah saya menjangkau SSH di paket Windows NAT?

Dari luar, tidak. Di paket Windows NAT, port eksternal pribadi diteruskan ke RDP (3389), dan itu satu-satunya penerusan masuk. Untuk SSH dari internet, pilih paket Windows dengan IPv4 sendiri. Di dalam server, OpenSSH tetap berfungsi untuk alat lokal.

Versi OpenSSH mana yang dipasang Windows Server 2022?

OpenSSH 8.1p1 for Windows. Karena itu pengaturan kata sandi memakai ChallengeResponseAuthentication, bukan nama baru KbdInteractiveAuthentication.

Komentar

Belum ada komentar. Jadilah yang pertama.

Tinggalkan komentar

Komentar dimoderasi sebelum muncul.