Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows ortamlarındaki çoğu kimlik doğrulaması, ortak bir etki alanını paylaşan sistemler için iyi çalışan bir kullanıcı adı/parola çifti ile gerçekleştirilir. Şirket içi ve bulutta barındırılan sistemler arasında olduğu gibi etki alanları arasında çalıştığınızda, bu tür kimlik doğrulama kaba kuvvet saldırılarına karşı savunmasız hale gelir.
Karşılaştırmak gerekirse, Linux ortamları genellikle ortak/özel anahtar çiftlerini kullanarak tahmin edilebilir parolaların kullanılmasını gerektirmeyen kimlik doğrulamasını yönlendirir. OpenSSH, anahtar tabanlı kimlik doğrulamasını desteklemeye yardımcı olacak araçlar içerir, özellikle:
- güvenli anahtarlar oluşturmak için ssh-keygen.
- özel anahtarları güvenli bir şekilde depolamak için ssh-agent ve ssh-add.
- bir sunucunun ilk kullanımı sırasında ortak anahtar dosyalarını güvenli bir şekilde kopyalamak için scp ve sftp.
Bu belge, Secure Shell (SSH) ile anahtar tabanlı kimlik doğrulamasını kullanmaya başlamak için Windows'ta bu araçların nasıl kullanılacağına ilişkin genel bir bakış sağlar. SSH anahtar yönetimi hakkında bilginiz yoksa, Secure Shell (SSH) Kullanarak Etkileşimli ve Otomatik Erişim Yönetimi Güvenliği başlıklı NIST belgesi IR 7966'yı gözden geçirmenizi kesinlikle öneririz.
Windows için OpenSSH'de anahtar tabanlı kimlik doğrulaması, yerel Windows hesapları ve Active Directory (etki alanı) hesaplarıyla çalışır. Microsoft Entra Id hesapları anahtar tabanlı kimlik doğrulamayı desteklemez.
Note
Windows OpenSSH, AuthorizedKeysCommand ve AuthorizedKeysCommandUser yönergelerini desteklemez. Yani Linux sisteminde olduğu gibi bu yönergeleri kullanarak Active Directory'den SSH anahtarlarını dinamik olarak getiremezsiniz. Desteklenen yapılandırma seçenekleri hakkında daha fazla bilgi için bkz. Windows Server ve Windows için OpenSSH Server yapılandırması.
Anahtar çiftleri
Anahtar çiftleri, belirli kimlik doğrulama protokolleri tarafından kullanılan ortak ve özel anahtar dosyalarına başvurur.
SSH ortak anahtar kimlik doğrulaması, biri özel , diğeri ortak olmak üzere iki anahtar dosyası oluşturmak için asimetrik şifreleme algoritmaları kullanır. Her özel anahtar dosyası bir parolanın eşdeğeridir ve her koşulda korunmaya devam etmelidir. Birisi özel anahtarınızı alırsa, erişiminiz olan herhangi bir SSH sunucusunda sizin gibi oturum açabilir. Ortak anahtar, SSH sunucusuna yerleştirilen anahtardır ve özel anahtardan ödün vermeden paylaşılabilir.
SSH sunucusu ve istemcisi, özel anahtarla sağlanan kullanıcı adının ortak anahtarını karşılaştırmak için anahtar tabanlı kimlik doğrulamasını kullanabilir. Sunucu tarafı ortak anahtarı istemci tarafı özel anahtarıyla doğrulanamıyorsa kimlik doğrulaması başarısız olur.
Anahtar çiftini oluştururken parola girerek anahtar çiftleriyle çok faktörlü kimlik doğrulaması uygulayabilirsiniz. Daha fazla bilgi için bkz . Kullanıcı anahtarı oluşturma. Kimlik doğrulaması sırasında kullanıcıdan parola istenir. Özel anahtarın varlığıyla birlikte parola, kullanıcının kimliğini doğrulamak için SSH istemcisinde kullanılır.
Important
Anahtar tabanlı kimlik doğrulaması aracılığıyla açılan uzak oturumda ilişkili kullanıcı kimlik bilgileri yoktur. Sonuç olarak oturum, kullanıcı olarak dışa yönelik kimlik doğrulaması yapamaz. Bu davranış tasarım gereğidir.
Sunucu anahtarı oluşturma
Ortak anahtarlar, Windows'ta yalnızca yöneticilere ve Sistem kullanıcısına erişim izni veren belirli erişim denetimi listesi (ACL) gereksinimlerine sahiptir.
sshd hizmeti ilk kez kullanıldığında, sunucunun anahtar çifti otomatik olarak oluşturulur.
Important
Bu makaledeki komutları çalıştırabilmeniz için önce OpenSSH Sunucusu'nu yüklemeniz gerekir. Daha fazla bilgi için bkz. Windows için OpenSSH'yi kullanmaya başlama.
Varsayılan olarak, manuel olarak başlamanız sshd gerekir. Sunucu her yeniden başlatıldığında otomatik olarak başlatılacak şekilde yapılandırmak için, sunucunuzda yükseltilmiş bir PowerShell isteminden aşağıdaki komutları çalıştırın:
# Set the sshd service to be started automatically.
Get-Service -Name sshd | Set-Service -StartupType Automatic
# Start the sshd service.
Start-Service sshd
Hizmetle sshd ilişkilendirilmiş kullanıcı olmadığından konak anahtarları C:\ProgramData\ssh altında depolanır.
Kullanıcı anahtarı oluşturma
Anahtar tabanlı kimlik doğrulamasını kullanmak için önce istemciniz için ortak/özel anahtar çiftleri oluşturmanız gerekir. Anahtar dosyaları oluşturmak için kullanabilirsiniz ssh-keygen.exe . Aşağıdaki anahtar oluşturma algoritmalarını belirtebilirsiniz:
- Dijital İmza Algoritması (DSA)
- Rivest–Shamir–Adleman (RSA)
- Eliptik Eğri Dijital İmza Algoritması (ECDSA)
- Ed25519
Algoritma belirtmezseniz Ed25519 kullanılır. Bu örnekte ECDSA gibi güçlü bir algoritma ve anahtar uzunluğu kullanılmalıdır.
ECDSA algoritmasını kullanarak anahtar dosyaları oluşturmak için, istemcinizdeki bir PowerShell veya Komut İstemi penceresinde aşağıdaki komutu çalıştırın:
ssh-keygen -t ecdsa
Komutun çıktısı aşağıdaki satırlar gibi görünmelidir, ancak bu username satırlar kullanıcı adınız ile değiştirilmelidir:
Generating public/private ecdsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_ecdsa):
İstemde, varsayılan dosya yolunu kabul etmek için Enter'ı seçebilir veya oluşturduğunuz anahtarlar için bir yol veya dosya adı belirtebilirsiniz.
Ardından, özel anahtar dosyalarınızı şifrelemek için parola kullanmanız istenir. Genel olarak, parola iki öğeli kimlik doğrulaması sağlamak için anahtar dosyasıyla çalıştığından boş bir parola kullanmanızı önermeyiz. Ancak bu örnekte parolayı boş bırakabilirsiniz.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username/.ssh/id_ecdsa.
Your public key has been saved in C:\Users\username/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@LOCAL-HOSTNAME
The key's randomart image is:
+--[ECDSA 256]--+
| . |
| o |
| . + + . |
| o B * = . |
| o= B S . |
| .=B O o |
| + =+% o |
| *oo.O.E |
|+.o+=o. . |
+----[SHA256]-----+
Artık belirtilen konumda bir genel/özel ECDSA anahtar çifti var. .pub dosyası ortak anahtardır ve uzantısı olmayan dosya özel anahtardır:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/3/2021 2:55 PM 464 id_ecdsa
-a---- 6/3/2021 2:55 PM 103 id_ecdsa.pub
Özel anahtar dosyası parolanın eşdeğeridir ve parolanızı koruduğunuz gibi korunmalıdır.
Özel anahtarlarınızı Windows hesabınızla ilişkili bir Windows güvenlik bağlamında güvenli bir şekilde depolamak için kullanabilirsiniz ssh-agent . Hizmeti, bilgisayarınız her yeniden başlatıldığında otomatik olarak başlatılacak şekilde yapılandırmak ssh-agent ve ssh-add özel anahtarı depolamak için sunucunuzdaki yükseltilmiş bir PowerShell isteminde aşağıdaki komutları çalıştırın:
# By default, the ssh-agent service is disabled. Configure it to start automatically.
# Run the following command as an administrator.
Get-Service ssh-agent | Set-Service -StartupType Automatic
# Start the service.
Start-Service ssh-agent
# The following command should return a status of Running.
Get-Service ssh-agent
# Load your key files into ssh-agent.
ssh-add $env:USERPROFILE\.ssh\id_ecdsa
Anahtarı ssh-agent istemcinizdeki hizmete ekledikten sonra, ssh-agent hizmet yerel özel anahtarı otomatik olarak alır ve SSH istemcinize geçirir.
Important
Özel anahtarınızı güvenli bir konuma yedeklemenizi ve hizmete eklediktenssh-agent sonra yerel sistemden silmenizi öneririz. Bu örnekte ECDSA gibi güçlü bir algoritma kullanıldığında özel anahtar aracıdan alınamaz. Özel anahtara erişiminizi kaybederseniz yeni bir anahtar çifti oluşturmanız ve etkileşimde olduğunuz tüm sistemlerde ortak anahtarı güncelleştirmeniz gerekir.
Açık anahtarı dağıtın
Daha önce oluşturduğunuz kullanıcı anahtarını kullanmak için, ortak anahtarınızın (\.ssh\id_ecdsa.pub) içeriğini sunucuya bir metin dosyasına yerleştirmeniz gerekir. Dosyanın adı ve konumu, kullanıcı hesabının yerel yönetici grubunun üyesi mi yoksa standart bir kullanıcı hesabı mı olduğuna bağlıdır. Aşağıdaki bölümlerde hem standart hem de yönetici kullanıcılar ele alınıyor.
Standart kullanıcı
Ortak anahtarınızın (\.ssh\id_ecdsa.pub) içeriğini authorized_keys\ içinde adlı bir metin dosyasına yerleştirmeniz gerekir. OpenSSH scp güvenli dosya aktarım yardımcı programını kullanarak veya anahtarı dosyaya yazmak için PowerShell kullanarak ortak anahtarınızı kopyalayabilirsiniz.
Ortak anahtarı sunucuya kopyalamak için aşağıdaki kodu kullanabilirsiniz. Son satırda username'yi kullanıcı adınızla değiştirin. Başlangıçta, sunucu için kullanıcı hesabı için bir parola girmeniz istenir.
# Get the public key file generated previously on your client.
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
# Generate the PowerShell command to run remotely that copies the public key file generated previously on your client to the authorized_keys file on your server.
$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"
# Connect to your server and run the PowerShell command by using the $remotePowerShell variable.
ssh username@domain@hostname $remotePowershell
Yönetici kullanıcı
Ortak anahtarınızın (\.ssh\id_ecdsa.pub) içeriğini administrators_authorized_keys içinde adlı bir metin dosyasına yerleştirmeniz gerekir. OpenSSH scp güvenli dosya aktarım yardımcı programını kullanarak veya anahtarı dosyaya yazmak için PowerShell kullanarak ortak anahtarınızı kopyalayabilirsiniz. Bu dosyadaki ACL'nin yalnızca yöneticilere ve Sistem kullanıcısına erişime izin verecek şekilde yapılandırılması gerekir.
Ortak anahtarı sunucuya kopyalamak ve ACL'yi yapılandırmak için aşağıdaki kodu kullanabilirsiniz. Son satırda username'yi kullanıcı adınızla değiştirin. Başlangıçta, sunucu için kullanıcı hesabı için bir parola girmeniz istenir.
Note
Bu örnekte, dosyayı oluşturma adımları gösterilmektedir administrators_authorized_keys . Bu dosya yalnızca yönetici hesapları için geçerlidir. Kullanıcının profil konumunda kullanıcıya özgü dosya yerine bu dosyayı kullanmanız gerekir.
# Get the public key file generated previously on your client.
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
# Generate the PowerShell command to run remotely that copies the public key file generated previously on your client to the authorized_keys file on your server.
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""Administrators:F"" /grant ""SYSTEM:F"""
# Connect to your server and run the PowerShell command by using the $remotePowerShell variable.
ssh username@domain@hostname $remotePowershell
İşletim sisteminin İngilizce olmayan yerelleştirilmiş sürümleri için, betiğin grup adlarını uygun şekilde yansıtacak şekilde değiştirilmesi gerekir. Grup adlarına izinler verildiğinde oluşabilecek hataları önlemek için, grup adı yerine güvenlik tanımlayıcısını (SID) kullanabilirsiniz. KOMUTUNU çalıştırarak Get-LocalGroup | Select-Object Name, SIDSID'yi alabilirsiniz. Grup adının yerine SID kullandığınızda, bunun önüne yıldız işareti (* ) eklenmelidir. Aşağıdaki örnekte , Yöneticiler grubu SID'yi S-1-5-32-544kullanır:
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""*S-1-5-32-544:F"" /grant ""SYSTEM:F"""
Bu adımlar, Windows üzerinde OpenSSH ile anahtar tabanlı kimlik doğrulaması kullanmak için gereken yapılandırmayı tamamlar.
Bu PowerShell komutlarını çalıştırdıktan sonra, özel anahtarı olan herhangi bir istemciden konağa bağlanabilirsiniz sshd .