Menggunakan SSH sebagai transport layer untuk PowerShell 7 Remoting (PWSH over SSH) menyederhanakan konektivitas lintas platform tanpa bergantung pada WinRM. Namun, implementasi OpenSSH di Windows Server sering menghasilkan galat Permission denied (publickey,keyboard-interactive) saat inisiasi sesi remote via Enter-PSSession -HostName <target> -SSHTransport.

Masalah ini umumnya dipicu oleh dua faktor utama: model izin NTFS yang tidak valid pada file kunci publik administrator, dan konfigurasi path subsystem PowerShell di sshd_config yang keliru.

Gejala dan Logging OpenSSH Service

Saat koneksi remote gagal, klien hanya menerima pesan kegagalan generik. Untuk mendapatkan konteks teknis, verifikasi status log pada target server di C:\ProgramData\ssh\logs\sshd.log. Jika file log belum aktif, aktifkan opsi log detail pada file C:\ProgramData\ssh\sshd_config:

SyslogFacility LOCAL0
LogLevel DEBUG3

Jalankan perintah restart service SSH di Windows Server:

Restart-Service sshd

Saat percobaan autentikasi dijalankan ulang dari klien, log sshd.log akan menampilkan entri diagnostik kritis seperti berikut:

debug3: mm_answer_keyallowed: reading file C:\ProgramData\ssh/administrators_authorized_keys
debug3: checking Access Control List (ACL) for C:\ProgramData\ssh/administrators_authorized_keys
Authentication refused: bad ownership or modes for file C:\ProgramData\ssh/administrators_authorized_keys

Root Cause 1: ACL NTFS administrators_authorized_keys

OpenSSH di Windows memberlakukan aturan khusus untuk akun yang tergabung dalam grup lokal Administrators. Kunci publik akun administratif tidak dibaca dari $HOME\.ssh\authorized_keys, melainkan dari C:\ProgramData\ssh\administrators_authorized_keys.

OpenSSH menolak file tersebut jika Access Control List (ACL) mengizinkan hak tulis (write/modify) kepada entitas non-privilege atau mewarisi (inherit) hak akses dari folder induk ProgramData. File tersebut hanya boleh diakses oleh grup SYSTEM dan BUILTIN\Administrators.

Langkah Perbaikan ACL via icacls

Jalankan perintah berikut di PowerShell dengan hak elevated (Run as Administrator) pada server target untuk memutus inheritance dan merestriksi hak akses:

# Tentukan path file
$AuthKeyPath = "$env:ProgramData\ssh\administrators_authorized_keys"

# Nonaktifkan inheritance dan hapus seluruh izin turunan
icacls.exe $AuthKeyPath /inheritance:r

# Berikan hak akses penuh hanya ke SYSTEM dan grup Administrator lokal
icacls.exe $AuthKeyPath /grant "SYSTEM:(F)"
icacls.exe $AuthKeyPath /grant "BUILTIN\Administrators:(F)"

Alternatif lazier menggunakan modul bawaan OpenSSHUtils jika terpasang: Repair-AuthorizedKeyPermissions -FilePath $AuthKeyPath.

Root Cause 2: Mismatch Subsystem pada sshd_config

Setelah autentikasi kunci publik berhasil, kegagalan inisiasi PowerShell 7 Remoting dapat berlanjut dengan pesan error koneksi terputus tiba-tiba atau The subsystem powershell is not defined. Klien PowerShell membutuhkan endpoint subsystem spesifik untuk broker protokol PSRP (PowerShell Remoting Protocol).

Periksa direktif Subsystem di bagian bawah C:\ProgramData\ssh\sshd_config. Kegagalan konfigurasi umumnya melibatkan spasi tanpa tanda kutip ganda atau path eksekusi pwsh.exe yang tidak valid:

# SALAH (Path tanpa quoting yang aman jika terdapat spasi atau versi salah)
Subsystem powershell C:\Program Files\PowerShell\7\pwsh.exe -sshs -NoLogo

# BENAR (Memanfaatkan format 8.3 atau escape quotes ganda)
Subsystem powershell "C:\Program Files\PowerShell\7\pwsh.exe" -sshs -NoLogo

Catatan: Jika OpenSSH dijalankan sebagai service 32-bit di atas Windows 64-bit, pastikan path tidak teralihkan ke SysWOW64 atau direktori yang salah.

Verifikasi Akhir Koneksi

Setelah ACL dan konfigurasi subsystem diperbaiki, restart kembali service SSH:

Restart-Service sshd

Uji koneksi dari mesin klien menggunakan commandlet PowerShell 7:

Enter-PSSession -HostName 192.168.1.50 -UserName adminuser -KeyFilePath ~/.ssh/id_ed25519 -SSHTransport

Koneksi akan langsung terhubung ke sesi shell PowerShell 7 remote tanpa prompt password atau peringatan integritas ACL.