Windows'ta SSH Ortak Anahtar Kimlik Doğrulamasını Yapılandırma
Bu yazıda, Windows'ta SSH kimlik doğrulamasının RSA veya EdDSA anahtarlarını kullanarak nasıl yapılandırılacağını göstereceğiz. Windows'ta genel ve özel anahtar çiftinin nasıl oluşturulacağını ve anahtar tabanlı kimlik doğrulama (parolalar olmadan) için Windows 10/11 veya Windows Server 2019/2022'de bir OpenSSH sunucusunun nasıl yapılandırılacağını görelim.
SSH anahtar tabanlı kimlik doğrulama, Linux dünyasında yaygın olarak kullanılmaktadır, ancak Windows'ta oldukça yakın zamanda ortaya çıkmıştır. Buradaki fikir, müşterinin ortak anahtarının SSH sunucusuna eklenmesi ve bir müşteri ona bağlanmaya çalıştığında, sunucunun, müşterinin karşılık gelen özel anahtarına sahip olup olmadığını kontrol etmesidir. Bu şekilde, uzaktaki bir kullanıcı parola girmeden Windows'ta kimlik doğrulaması yapabilir.
Windows'ta SSH Anahtar Çifti Oluşturma
OpenSSH çalıştıran uzak Windows ana bilgisayarına bağlanmak için kullanacağınız istemci bilgisayarda iki SSH anahtarı (genel ve özel) oluşturmalısınız. İstemci tarafında bir özel anahtar saklanır (anahtarı güvende tutun ve kimseyle paylaşmayın!) ve SSH sunucusundaki yetkili_anahtarlar dosyasına bir genel anahtar eklenir. Bir Windows istemcisinde RSA anahtarları oluşturmak için OpenSSH istemcisini yüklemeniz gerekir.
Windows 10/11 ve Windows Server 2019/2022'de OpenSSH istemcisi, PowerShell kullanılarak isteğe bağlı bir Windows özelliği olarak yüklenir:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0Önceki Windows sürümlerinde GitHub'dan Win32-OpenSSH bağlantı noktasını kurabilirsiniz (Windows'ta bir SFTP (SSH FTP) sunucusu kurma hakkındaki makaledeki örneğe bakın).
Standart (yükseltilmemiş) bir PowerShell oturumu açın ve şu komutu kullanarak bir çift ED25519 anahtarı oluşturun:
ssh-keygen -t ed25519
Varsayılan olarak, ssh-keygen aracı RSA 2048 anahtarları üretir. Şu anda RSA anahtarları yerine ED25519 kullanılması önerilir.
Özel anahtarı korumak için bir parola girmeniz istenecektir. Parolayı belirtirseniz, SSH kimlik doğrulaması için bu anahtarı her kullandığınızda parolayı girmeniz gerekecektir. Parola girmedim (önerilmez).
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\myuser/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\myuser/.ssh/id_ed25519.
Your public key has been saved in C:\Users\myuser/.ssh/id_ed25519.pub.
The key fingerprint is: SHA256:xxxxxxxx myuser@computername
The key's randomart image is:
+--[ED25519 256]--+
+----[SHA256]-----+
Ssh-keygen, geçerli bir Windows kullanıcısının profilinde .ssh dizinini oluşturacaktır (
%USERPROFILE%\.ssh) ve 2 dosya oluşturun:
id_ed25519- özel anahtar (bir RSA anahtarı oluşturduysanız, dosyanın adı
id_rsa)
id_ed25519.pub- genel anahtar (benzer bir RSA anahtarı denir
id_rsa.pub
SSH anahtarları oluşturulduktan sonra, özel anahtarınızı SSH Agent hizmetine ekleyebilirsiniz, bu da özel anahtarları kolayca yönetmenize ve bunları kimlik doğrulama için kullanmanıza olanak tanır.
SSH Aracısı hizmeti, özel anahtarlarınızı saklayabilir ve bunları mevcut kullanıcının güvenlik bağlamında sağlayabilir. ssh-agent hizmetini çalıştırın ve PowerShell hizmet yönetimi komutlarını kullanarak otomatik olarak başlayacak şekilde yapılandırın:
set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agentÖzel anahtarınızı ssh-agent veritabanına ekleyin:
ssh-add "C:\Users\youruser\.ssh\id_ed25519"Identity added: C:\Users\youruser\.ssh\id_ed25519 (youruser@computername)Veya aşağıdaki gibi:
ssh-add.exe $ENV:UserProfile\.ssh\id_rsaOpenSSH: Windows'ta Anahtar Tabanlı Kimlik Doğrulamayı Genel Anahtarla Yapılandırma
Şimdi SSH ortak anahtarınızı SSH sunucusuna kopyalamanız gerekiyor. Bu örnekteki SSH sunucusu, OpenSSH hizmetinin kurulu ve yapılandırılmış olduğu uzak bir Windows 11 makinesidir.
“Windows'ta bir OpenSSH sunucusu nasıl yapılandırılır? ”.
id_ed25519.pub dosyasını, SSH sunucusuna bağlanmak için kullanacağınız kullanıcının profilindeki .ssh dizinine kopyalayın. Örneğin, uzak Windows 11 cihazımda bir user1 hesabım var, bu yüzden anahtarı C:\Users konumuna kopyalamam gerekiyor \user1\.ssh uthorized_keys.
Ortak anahtarı, SCP kullanarak istemciden SSH sunucusuna kopyalayabilirsiniz:
scp C:\Users\youruser\.ssh\id_rsa.pub admin@192.168.1.15:c:\users\admin\.ssh\authorized_keysTek bir yetkili_anahtarlar dosyasına birden çok ortak anahtar ekleyebilirsiniz.
Ortak anahtar kimlik doğrulaması, Windows'ta OpenSSH sunucusunda varsayılan olarak devre dışıdır. Bunu sshd_config dosyasında kontrol edebilirsiniz. OpenSSH'de izin verilen kimlik doğrulama yöntemlerinin bir listesini almanın en kolay yolu, aşağıdaki PowerShell komutunu kullanmaktır (Select-String, PowerShell'de grep'in bir analoğu olarak kullanılır):
cat "C:\ProgramData\ssh\sshd_config"| Select-String "Authentication"#PubkeyAuthentication yes
#HostbasedAuthentication no
#HostbasedAuthentication
PasswordAuthentication yes
#GSSAPIAuthentication noBu örnekte, PubkeyAuthentication satırı yorumlanmıştır, bu da bu kimlik doğrulama yönteminin devre dışı olduğu anlamına gelir. sshd_config dosyasını not defteri ile açın ve satırın açıklamasını kaldırın:
Notepad C:\ProgramData\ssh\sshd_configPubkeyAuthentication yesAyrıca, sshd_config yapılandırma dosyasında StrictModes seçeneğini devre dışı bırakmanız gerekecektir. Varsayılan olarak, bu mod etkindir ve özel ve genel anahtarlar uygun şekilde korunmadığında SSH anahtarı tabanlı kimlik doğrulamasını engeller. satırın açıklamasını kaldır
#StrictModes yesve şununla değiştir:
StrictModes noYerel bir SSH istemcisi kullanarak uzak bir ana bilgisayara bağlanmak için aşağıdaki komutu kullanın:
ssh (username)@(SSH server name or IP address)Örneğin:
ssh admin@192.168.1.15Bu, < altındaki 192.168.1.15 IP adresine sahip uzak bir SSH sunucusuna bağlanmak istediğiniz anlamına gelir.user1 hesabı. SSH Aracısı hizmeti, uzak bir ana bilgisayarda kimlik doğrulaması yapmak için otomatik olarak özel anahtarınızı kullanmayı dener.
SSH anahtarlarını yönetmek için ssh-agent hizmetini kullanmak istemiyorsanız, SSH kimlik doğrulaması için kullanılacak özel anahtar dosyasının yolunu belirleyebilirsiniz:
ssh user1@192.168.1.15 -i "C:\Users\youuser\.ssh\id_ed25519"Bir Active Directory etki alanından bir kullanıcı hesabı kullanarak SSH ana bilgisayarına bağlanmak için aşağıdaki biçimi kullanın:
ssh jsmith@a-d.site@192.168.1.15 -i <private_key_absolute_path>
İlk kez bağlanırken, SSH sunucu anahtarının parmak izini güvenilenler listesine eklemeniz gerekir. yes -> Enter yazın.
The authenticity of host '192.168.1.15 (192.168.1.15)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yesETW günlüğü, Windows OpenSSH'de düz metin dosyaları yerine SSH günlüklerini depolamak için kullanılır. Windows Olay Görüntüleyici'de (Uygulama ve Hizmet Günlükleri -> OpenSSH -> Operasyonel) SSH anahtarı tabanlı kimlik doğrulama günlüklerini kontrol edebilirsiniz.
Özel anahtar ile SSH bağlantısı başarılı olursa, OpenSSH günlüğünde aşağıdaki olay görünecektir:
EventID 4
sshd: Accepted publickey for locadm from 192.168.15.20 port 55772 ssh2: ED25519 SHA256:xxxxxxxÖzel anahtarınızı kullanarak SSH sunucunuza bağlanamadıysanız ve yine de bir parola girmeniz isteniyorsa, bağlanmaya çalıştığınız kullanıcı hesabı muhtemelen yerel Windows yöneticileri grubunun (grup) bir üyesidir. SID
S-1-5-32-544). Daha sonra tartışacağız.
Yönetici Kullanıcı Altında Windows'u SSH Anahtarıyla Günlüğe Kaydetme
OpenSSH, Windows'ta yönetici kullanıcı hesapları için özel anahtar tabanlı kimlik doğrulama ayarları kullanır.
Kullanıcı profilinde yetkili_anahtarlar anahtarı yerine C:\ProgramData\ssh\administrators_yetkili_anahtarlar dosyasını kullanmanız gerekir. Genel SSH anahtarınızı bu metin dosyasına ekleyin (güvenlik nedeniyle, yalnızca Yöneticiler ve SİSTEM gruplarının bu dosyayı okuma izni olmalıdır).
Bir dosyadaki NTFS izinlerini şu şekilde değiştirebilirsiniz:
icacls aracı:
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"veya Get-Acl ve Set-Acl PowerShell cmdlet'lerini kullanarak:
get-acl "$env:programdata\ssh\ssh_host_rsa_key" | set-acl "$env:programdata\ssh\administrators_authorized_keys"
Bundan sonra SSH anahtarı kimlik doğrulaması, StrictModes devre dışı bırakılsa bile çalışır.
Bir kullanıcı profilinden yetkili_anahtarlar dosyasını kullanmak ve genel anahtar bilgisini administrators_yetkili_anahtarlar dosyasına taşımamak için OpenSSH yapılandırma dosyasındaki (C:\ProgramData\ssh\sshd_config) bir satırı yorumlayabilirsiniz. >).
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keysEk olarak, sshd_config'de SSH şifresiyle oturum açmayı devre dışı bırakabilirsiniz:
PasswordAuthentication nosshd_config dosyasındaki değişiklikleri yaptıktan sonra sshd servisini yeniden başlatmayı unutmayın.
restart-service sshdPasswordAuthentication no'yu ayarlarsanız ve SSH anahtarı kimlik doğrulamasını yanlış yapılandırırsanız, ssh ile bağlanırken bir hata görünecektir:
user1@192.168.13.15: Permission denied (publickey,keyboard-interactive).SSH root girişini kısıtlamak için Linux'ta OpenSSH'de PermitRootLogin seçeneğini kullanabilirsiniz. Bu yönerge Windows OpenSSH'de uygulanamaz ve yönetici hesapları altında ssh girişini reddetmek için DenyGroups parametresini kullanmalısınız:
DenyGroups AdministratorsBöylece, Windows'ta bir anahtar çifti kullanarak SSH kimlik doğrulamasını yapılandırdınız. Artık uzak sunuculara güvenli bir şekilde erişmek, SSH tünelindeki bağlantı noktalarını otomatik olarak iletmek, komut dosyalarını çalıştırmak ve diğer otomasyon görevlerini gerçekleştirmek için bu kimlik doğrulama yöntemini kullanabilirsiniz.













