Windows Server 2019 varsayılan olarak OpenSSH Client kurulu geliyor. Yönetici ayrıcalıklarıyla açılmış bir Powershell konsolunda şu komut ile kontrol edebiliriz:
PS> Get-WindowsCapability -Online -Name 'OpenSSH*'
Buna ilave olarak OpenSSH Server kurulumunu da bir özellik gibi kurabiliriz:
PS> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Kurulduktan sonra sshd hizmetini hemen başlatmak için
PS> Start-Service sshd
kullanabiliriz. Ama Windows Firewall etkinse önce bir kuralımızın olup olmadığını kontrol etmemiz iyi olabilir:
PS> Get-NetFirewallRule -Name *ssh*
Eğer bir kural yoksa yenisini yaratmak için
PS> New-NetFirewallRule -Name SSHSpec -DisplayName SSHSpec -Profile any
-Protocol TCP
-LocalPort 1022
-Direction Inbound
-Action Allow
Uzaktan bağlandığımızda varsayılan olarak cmd shell gelir. Bunu powershell ile değiştirmek için (ayrıntılar için [2])
PS> New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH"
-Name DefaultShell
-Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
-PropertyType String
-Force
İleri seviye ayarlar sshd_config dosyasında, bu dosya da $env:ProgramData konumunda. Bu dosyadaki birkaç parametreyi hatırlayalım:
DenyUsers: Bağlanması engellenmek istenen kullanıcılar
AllowUsers: SSH sunucunun hedef kitlesi
PermitRootLogin: Windows Server için anlamsız
PermitEmptyPasswords: Boş parolalar geçerli mi değil mi
PasswordAuthentication: Parola ile bağlanmak mümkün mü, yoksa sadece RSA anahtarıyla mı
PubKeyAuthentication: RSA anahtarıyla oturum açmayı etkinleştirmek
Eğer bir anahtar çifti yaratmak istiyorsak ssh-keygen ile yapabiliriz. Bu adımdan sonra id_rsa ve id_rsa.pub adında iki dosya oluşacak. pub uzantılı genel (public) anahtarımız. Bunu sunucuda bırakacağız. id_rsa ise bizim özel anahtarımız. Paylaşmamamız ve yanımızda taşımamız gerekiyor.
Öncelikle sunucu tarafında authorized_keys dosyasını oluşturalım ([1]'de sshd hizmetini başlatınca %programdata%\ssh altında bu anahtarları oluşturacağı söylenmiş).
PS> copy id_rsa.pub authorized_keys
Bu dosyanın yetkileri önemli. Sadece SYSTEM ve bizim kullanıcımızın tam yetkileri olmalı, başka yetki olmamalı. Bu amaçla icacls aracını kullanarak önce yetkilerin devralınmasını engelleyelim, daha sonra da administrators grubunu yetkiler listesinden çıkaralım.PS> icacls authorized_keys /inheritance:r
PS> icacls authorized_keys /remove:g BUILTIN\Administrators
Yine şu sayfada sshd_config dosyasındaki aşağıdaki satırların başına # işareti konularak etkisizleştirilmesi önerilmiş.
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
sshd_config dosyasında yapılan değişikliklerden sonra sshd hizmetinin yeniden başlatılması gerek.
PS> Restart-Service sshd
Düzeltme: ssh-keygen bizim bilgisayarımızda çalıştırılmalı, sunucuda değil. Ayrıca sshd_config dosyasında başına # koyarak etkisizleştirilmek yerine yeni düzene uyup, autorized_keys yerine %programdata%\ssh\administrators_authorized_keys dosyasını kullanmaya başlayabiliriz.
Uzaktan bağlanabilmemiz için bir adım kaldı, o da id_rsa anahtarımızı yerel bilgisayara aktarmak. scp ile uzaktan kopyalayabiliriz.
PS> scp administrator@192.168.x.x:/Users/administrator/.ssh/id_rsa C:\Users\username
Ancak bu dosyanın da yetkileri ile ilgili kesin kurallar var. Benzer şekilde sadece SYSTEM ve kendi kullanıcımız yetkili olmalı.
PS> icacls .\id_rsa /inheritance:r
PS> icacls .\id_rsa /grant username:F
PS> icacls .\id_rsa /grant SYSTEM:F
Bundan sonra artık ssh bağlantısı mümkün.
PS> ssh administrator@192.168.x.x -i .ssh/id_rsa
Hala aşağıdaki gibi hata alıyorsanız
Permission denied (publickey,keyboard-interactive)
sondan bir önceki adımda # işaretiyle etkisizleştirmeniz gereken satırı atlamamış olabilirsiniz. Ya da alternatif olarak sshd_config dosyasında geçen
#StrictModes yes
satırını
StrictModes no
olarak değiştirmek önerilmiş.
---
[1] https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH
[2] https://github.com/PowerShell/Win32-OpenSSH/wiki/DefaultShell
Hiç yorum yok:
Yorum Gönder