Windows Server'da OpenSSH Nasıl Kurulur [Tüm Kılavuz]


Secure Shell (SSH) protokolü ve OpenSSH projesi onlarca yıldır Linux'ta varlığını sürdürüyor. Ancak Windows'ta OpenSSH, yakın zamana kadar Windows dünyasında benimsenmedi. Bu nedenle, bir Windows Sunucusu genellikle önceden oluşturulmuş ve kullanıma hazır olarak gelmez ve bazı kurulumlar gerektirir.

Bu eğitimde, Windows Sunucunuza SSH'yi Linux kadar kolay bir şekilde nasıl aktaracağınızı öğreneceksiniz. OpenSSH'yi Windows'a nasıl yükleyeceğinizi (veya güncelleyeceğinizi), uygun güvenlik duvarı kurallarını nasıl ekleyeceğinizi ve genel anahtarı, parolayı ve sertifika tabanlı kimlik doğrulamayı nasıl yapılandıracağınızı öğreneceksiniz.

Önkoşullar

Bu makaledeki örnekleri ve demoları etkili bir şekilde takip etmek için aşağıdaki gereksinimleri karşılamanız gerekir.

  • Bir Windows Server makinesi - Bu makalede Windows Server 2019 Datacenter kullanılacaktır. Bu eğitimin kullanacağı sunucu, june adında bir kullanıcı hesabına sahip olacak ve sunucuya IP adresinden bağlanacaktır. 40.117.77.227 adresi ve ataWindows ana bilgisayar adı.
  • PowerShell 7.1'in yüklü olduğu yerel bir bilgisayar. PowerShell 7.1, Windows, Linux ve macOS'de mevcuttur. Bu makaledeki örneklerde Windows 10'da PowerShell 7,1 kullanılmaktadır.

OpenSSH'yi indirme

Linux sunucularının aksine, Windows sunucularında kullanıma hazır çalışan bir SSH sunucusu yoktur. Ancak Microsoft, Windows için OpenSSH'nin açık kaynaklı bir bağlantı noktasını yayımladı. Bu sürümle birlikte artık bir Windows makinesine SSH sunucusu kurabilirsiniz.

Başlamak için önce OpenSSH'yi indirmeniz gerekir. Bunu yapmak için aşağıdaki adımları izleyin:

  1. Uzak Masaüstü'nü (RDP) veya tercih ettiğiniz masaüstü yöneticisi istemcisini kullanarak bir Windows Sunucusundaki masaüstüne bağlanın.

2. Windows Server masaüstünüzde yükseltilmiş bir Windows PowerShell konsolunu açın.

3. Daha sonra aşağıdaki kodu kopyalayıp PowerShell penceresine yapıştırın ve Enter tuşuna basın. Bu komut dosyası, bu yazının yazıldığı an itibariyle v8.1.0.0p1-Beta olan en son OpenSSH sürümünü mevcut çalışma dizinine indirecektir.

OpenSSH'yi indirmek için PowerShell kodunu kaydetmek isterseniz Windows PowerShell ISE veya Visual Studio Code gibi bir kod düzenleyiciyi de açıp buraya kaydedebilirsiniz.

## Set network connection protocol to TLS 1.2
## Define the OpenSSH latest release url
 $url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/'
## Create a web request to retrieve the latest release download link
 $request = [System.Net.WebRequest]::Create($url)
 $request.AllowAutoRedirect=$false
 $response=$request.GetResponse()
 $source = $([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip'
## Download the latest OpenSSH for Windows package to the current working directory
 $webClient = [System.Net.WebClient]::new()
 $webClient.DownloadFile($source, (Get-Location).Path + '\OpenSSH-Win64.zip')

4. OpenSSH-Win64.zip dosyası artık mevcut çalışma dizininizde olmalıdır. Aşağıdaki komutu çalıştırarak bunu doğrulayın.

Get-ChildItem *.zip

Aşağıda görebileceğiniz gibi dizinde OpenSSH-Win64.zip dosyası bulunmaktadır.

OpenSSH'yi yükleme

OpenSSH-Win64.zip'i indirdikten sonraki adım, OpenSSH'yi sunucuya yüklemektir. Beklemeniz durumunda kurulum sihirbazı yok.

  1. Hala aynı PowerShell oturumundayken aşağıdaki kodu kopyalayın ve PowerShell'de çalıştırın. Bu kod, OpenSSH-Win64.zip dosyasının içeriğini C:\Program Files\OpenSSH dizinine çıkarır.
# Extract the ZIP to a temporary location
 Expand-Archive -Path .\OpenSSH-Win64.zip -DestinationPath ($env:temp) -Force
# Move the extracted ZIP contents from the temporary location to C:\Program Files\OpenSSH\
 Move-Item "$($env:temp)\OpenSSH-Win64" -Destination "C:\Program Files\OpenSSH\" -Force
# Unblock the files in C:\Program Files\OpenSSH\
 Get-ChildItem -Path "C:\Program Files\OpenSSH\" | Unblock-File

2. ZIP dosyasını çıkardıktan sonra, C:\Program Files\OpenSSH\install-sshd.ps1 betiğini yürütmek için PowerShell'de aşağıdaki komutu çalıştırın. Bu betik, OpenSSH SSH Sunucu hizmetini (sshd) yükler. ve OpenSSH Kimlik Doğrulama Aracısı hizmeti (sshd-agent).

& 'C:\Program Files\OpenSSH\install-sshd.ps1'

Beklenen sonucu aşağıda görebilirsiniz.

SSH sunucusunun otomatik olarak başlatılmasını sağlamak için aşağıdaki komutu PowerShell'de çalıştırın.

## changes the sshd service's startup type from manual to automatic.
 Set-Service sshd -StartupType Automatic
## starts the sshd service.
 Start-Service sshd

SSH Trafiğine İzin Vermek İçin Windows Güvenlik Duvarı Kuralı Ekleme

Bu prosedür yalnızca Windows Sunucunuz Windows Güvenlik Duvarı kullanıyorsa uygulanabilir. Üçüncü taraf güvenlik duvarları kullanan sunucular için 22 numaralı bağlantı noktasına nasıl izin verileceğini öğrenmek üzere güvenlik duvarı belgelerinize bakın.

OpenSSH'yi yüklemek, SSH trafiğine izin verecek bir güvenlik duvarı istisna kuralını otomatik olarak oluşturmaz. Bu nedenle bir sonraki göreviniz güvenlik duvarı kuralını manuel olarak oluşturmaktır.

Yeni bir Windows Güvenlik Duvarı kuralı oluşturmanın en kolay yollarından biri PowerShell ve New-NetFirewallRule cmdlet'idir. Aşağıdaki komut, 22 numaralı bağlantı noktasına yönlendirilen tüm gelen TCP trafiğine izin veren SSH'ye İzin Ver adlı bir güvenlik duvarı kuralı oluşturur.

Aşağıdaki komutu kopyalayın ve PowerShell'de çalıştırın.

New-NetFirewallRule -Name sshd -DisplayName 'Allow SSH' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Aşağıdaki ekran görüntüsü, güvenlik duvarı kuralını oluşturduktan sonra PowerShell'de beklenen çıktıyı göstermektedir.

Parola Kimlik Doğrulamasını kullanarak SSH'ye bağlanma

Bu noktada OpenSSH’yi Windows’a yüklediniz ve ilk sunucu yapılandırmasını gerçekleştirdiniz. Bir sonraki adım, SSH aracılığıyla bağlantı kurmanın gerçekten işe yarayıp yaramadığını test etmektir.

Yeni yapılandırdığınız SSH sunucunuzu test etmek için şimdi yerel bilgisayarınızda ssh komutunu çalıştıralım.

Bu bölümdeki adımların aynısı, bir Linux SSH sunucusuna bağlanırken de geçerlidir.

1. Bu sefer yerel bilgisayarınızdan PowerShell'i açın.

2. Daha sonra SSH giriş işlemini başlatmak için aşağıdaki komutu çalıştırın. Windows Sunucunuzun kullanıcı adını ve uzak ana bilgisayarını değiştirdiğinizden emin olun.

ssh [email 

3. Sunucuya ilk kez bağlandığınız için Ana bilgisayarın kimliğinin belirlenemediğini belirten bir uyarı göreceksiniz. Bu mesaj, bilgisayarınızın uzak ana bilgisayarı henüz tanımadığı anlamına gelir. Devam etmek için evet yazın ve Enter tuşuna basın.

4. Parola istendiğinde hesabınızın parolasını yazın ve enter tuşuna basın.

5. Giriş yaptıktan sonra aşağıdaki ekran görüntüsünde görebileceğiniz gibi uzak ana bilgisayarın komut istemine ulaşacaksınız. Uzak ana bilgisayarda oturuma girdiğinizi onaylamak istediğinizi varsayalım. Bunu yapmak için ana bilgisayar adı yazın ve Enter tuşuna basın. Komut uzak bilgisayarın adını döndürmelidir.

OpenSSH için Varsayılan Kabuğu PowerShell'e Değiştirme

Windows SSH sunucunuzda ilk kez oturum açtığınızda, varsayılan kabuk veya komut yorumlayıcısının CMD olduğunu fark edeceksiniz. CMD'nin varsayılan SSH kabuğu olması iyidir, ancak bunun yerine varsayılan kabuk olarak PowerShell'i kullanmayı tercih ederseniz aşağıdaki adımları izleyin.

Varsayılan OpenSSH kabuğunu CMD'den PowerShell'e değiştirmek için:

Öncelikle, henüz açık bir pencereniz yoksa, Windows Sunucunuzda yükseltilmiş bir PowerShell penceresi açın.

Daha sonra, HKLM:\SOFTWARE\OpenSSH kayıt defteri anahtarında DefaultShell adında yeni bir kayıt defteri dizesi değeri oluşturun. DefaultShell dizesi verilerini Windows olarak ayarlayın. PowerShell yolu C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.

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

Aşağıdaki ekran görüntüsü komutun beklenen sonucunu göstermektedir.

Ortak Anahtar Kimlik Doğrulamasını Yapılandırma

Önceki bölümlerde kullanıcı adı ve şifre ile bağlanıyordunuz. bu işe yarar ancak SSH sunucusuyla kimlik doğrulamanın daha güvenli bir yolu anahtar çifti kullanmaktır.

Özetle, bir anahtar çifti genel anahtar ve özel anahtar adı verilen iki anahtardan oluşur ve bunlar, kimliğinizi kanıtlayacak bir dizi güvenlik kimlik bilgisi oluşturur.

Genel anahtar sunucuda saklanır, özel anahtar ise yerel bilgisayarda kalır. Özel bir anahtara şifreniz gibi davranmalısınız. Özel anahtarın güvenliği ihlal edilirse herkes bunu SSH sunucunuza erişim sağlamak için kullanabilir.

Admins_authorized_keys Dosyasını Hazırlama

Genel anahtarların sunucuda olması gerekir. Ama nerede? Windows'ta OpenSSH için, SSH sunucusu genel anahtarları C:\ProgramData\ssh\administrators_authorized_keys dosyasından okur. Ancak bu dosya varsayılan olarak mevcut değildir. Önce bir tane oluşturmalısınız.

administrators_authorized_keys dosyasını oluşturmak ve uygun erişim kontrol listesini (ACL) ayarlamak için aşağıdaki adımları izleyin.

Windows Sunucusunda:

1. Henüz yapmadıysanız, yükseltilmiş bir Windows PowerShell konsolunu açın.

2. Aşağıdaki komutu kopyalayın ve PowerShell'de çalıştırın. Bu komut, Yeni Öğe cmdlet'ini kullanarak administrators_authorized_keys dosyasını oluşturur.

New-Item -Type File -Path C:\ProgramData\ssh\administrators_authorized_keys

Aşağıdaki ekran görüntüsüne benzer bir sonuç görmelisiniz.

3. Ardından, ssh_host_dsa_key dosyasına atanmış olan ACL'yi alın ve bu ACL'yi admins_authorized_keys dosyasına kopyalayın. Bunu yapmak için aşağıdaki komutu çalıştırın.

get-acl C:\ProgramData\ssh\ssh_host_dsa_key | set-acl C:\ProgramData\ssh\administrators_authorized_keys

OpenSSH hizmeti, yalnızca Yöneticiler grubunun ve SYSTEM hesabının admins_authorized_keys dosyasına erişim sahibi olmasını gerektirir. ACL zaten ayarlı olduğundan ssh_host_dsa_key'in ACL'sini admins_authorized_keys'e kopyalamak mantıklıdır.

4. Şimdi Windows Gezgini'ni açın.

5. C:\ProgramData\ssh\ klasörüne gidin.

6. administrators_authorized_keys dosyasına sağ tıklayın ve Özellikler'e tıklayın.

7. Özellikler sayfasında Güvenlik Sekmesi'ni ve ardından Gelişmiş'i tıklayın.

8. Daha sonra izinlerin aşağıdaki resimdeki gibi olup olmadığını onaylayın.

Yeni bir SSH Anahtar Çifti Oluşturma

Yeni bir SSH anahtar çifti oluşturmak için Windows 10 (ve üstü) ve çoğu Linux işletim sisteminde yerleşik OpenSSH istemci araçlarının bir parçası olan ssh-keygen komutunu kullanın.

Bu bölümde gösterilen örnek hem Windows hem de Linux bilgisayarlarda çalışır.

Yerel bilgisayarınızda, PowerShell konsolunda:

1. Aşağıdaki komutu çalıştırarak ana klasörünüzün .ssh dizinine gidin.

cd ~/.ssh

2. Daha sonra ssh-keygen komutunu yazın ve Enter'a basın. Oluşturmakta olduğunuz anahtarı kaydetmek için bir dosya konumu girmeniz istendiğinde, varsayılan konumu koruyun ve Enter tuşuna basın. Bunu yapmak, SSH istemcinizin otomatik olarak kimlik doğrulaması yaparken SSH anahtarlarınızı bulmasına olanak tanır.

Windows'ta varsayılan anahtar dosyası C:\Users\\.ssh\id_rsa'dır.

3. Bir sonraki istemde parolayı boş bırakın. Bu noktada test için parola kullanmanıza gerek yoktur.

Özel anahtarınıza bir parola eklemek, onun güvenliğini önemli ölçüde artırır. Parola, özel anahtarınız için ikinci faktörlü kimlik doğrulama (2FA) görevi görür.

Komutun iki dosya oluşturduğunu fark edeceksiniz; id_rsa (özel anahtar) ve id_rsa.pub (genel anahtar).

Genel Anahtarın Windows SSH Sunucusuna Dağıtılması

Artık özel-genel anahtar çiftinizi oluşturduğunuza göre, bir sonraki adımınız genel anahtarı SSH sunucusundaki C:\ProgramData\ssh\administrators_authorized_keys dosyasına kopyalamaktır.

Yerel bilgisayarınızda, PowerShell konsolunda:

1. Aşağıdaki kodu kopyalayın ve PowerShell'de çalıştırın. Önce kullanıcı adını ve IP adresini değiştirdiğinizden emin olun. Her komutun ne yaptığını öğrenmek için her komutun üzerindeki yoruma başvurabilirsiniz.

# Read the public key
 $public_key = Get-Content ~/.ssh/id_rsa.pub
# Append the public key to the administrators_authorized_keys on the server using ssh.
 ssh [email  "'$($public_key)' | Out-File C:\ProgramData\ssh\administrators_authorized_keys -Encoding UTF8 -Append"

2. İstendiğinde şifrenizi girin; ssh genel anahtarı kopyalamaya devam edecektir. Aşağıda gösterildiği gibi benzer bir sonuç göreceksiniz.

Genel Anahtar Kimlik Doğrulamasını kullanarak SSH'ye bağlanma

Artık ortak anahtarınızı SSH sunucunuza kopyaladığınıza göre, kimlik doğrulamak için artık şifre kullanmanıza gerek yok. Aşağıda görebileceğiniz gibi ssh şifre sormadı.

Sertifika Kimlik Doğrulamasını Yapılandırma

Ortak anahtar kimlik doğrulaması gibi, sertifika kimlik doğrulaması da parolasızdır veya parola korumalıdır. Sertifika oturum açma işlemini etkinleştirmek için, genel anahtarı SSH sunucusuna dağıtmadan bir anahtar çifti oluşturma prosedürünü izleyin.

Genel anahtarı SSH sunucusundaki yetkili_anahtarlar veya yöneticiler_yetkili_anahtarlar dosyalarıyla eşleştirmeniz gerekmez. Bunun yerine ortak anahtar, bir sertifika yetkilisi (CA) anahtarı kullanılarak imzalanır.

Sertifika Yetkilisi (CA) Anahtarını Oluşturma

İmzalama için CA anahtarlarını oluşturmak, bu makalenin önceki bölümlerinde yaptığınız kullanıcı anahtar çiftini oluşturmaya benzer. Ancak bu sefer yeni CA anahtarları için bir dosya adı belirtmeniz gerekecek. Bunu yapmak için Windows Sunucunuzda bir PowerShell konsolunda:

Aşağıda gösterildiği gibi ssh-keygen komutunu yürütün. Bu komut, CA anahtarını C:\ProgramData\ssh\ca_userkeys içinde oluşturur, ancak farklı bir dosya adı kullanmaktan çekinmeyin. Farklı bir dosya adının kullanılması CA anahtarının işlevselliğini etkilemez.

Parola sorulduğunda parolayı boş bırakın ve Enter tuşuna basın.

ssh-keygen -f C:\ProgramData\ssh\ca_userkeys

Aşağıda komutun iki dosya oluşturduğunu görebilirsiniz. Özel anahtar olan ca_userkeys ve genel anahtar olan ca_userkeys.pub.

Artık CA anahtarlarını oluşturduğunuza göre, SSH sunucusuna CA'ya güvenmesini ve CA anahtarını nerede bulacağını söyleyin. Bunu yapmak için, sunucudaki C:\ProgramData\ssh\sshd_config dosyasına TrustedUserCAKeys path/to/ca_userkeys.pub adlı yeni bir satır ekleyin.

Yapılandırma öğesini sshd_config dosyasına eklemek için aşağıdaki komutları çalıştırın.

# If the SSH server is Windows
 echo TrustedUserCAKeys C:\ProgramData\ssh\ca_userkeys.pub>> C:\ProgramData\ssh\sshd_config

Kullanıcının Genel Anahtarının İmzalanması

Bu noktada CA anahtarlarını oluşturdunuz ve SSH sunucusunu CA ortak anahtar dosyasına güvenecek şekilde yapılandırdınız. Şimdi geriye kalan, kullanıcı ortak anahtarınızı imzalamaktır.

Yerel bilgisayarınızda, PowerShell konsolunda:

1. SCP komutunu kullanarak id_rsa.pub dosyasını SSH sunucusundaki ev sürücünüze kopyalayın. Kullanıcı adını ve IP adresini doğru değerlerle değiştirdiğinizden emin olun.

scp ((Resolve-Path ~/.ssh/id_rsa.pub).Path) [email :id_rsa.pub

2. ssh kullanarak Windows Sunucunuzda oturum açın. Oturum açtıktan sonra kullanıcının genel anahtarını imzalamak için ssh-keygen komutunu çalıştırın. Aşağıdaki komutun birkaç parametre kullandığını fark edeceksiniz. Onları parçalayalım.

  • -s C:\ProgramData\ssh\ca_userkeys - ortak anahtarı imzalamak için CA anahtarının konumunu belirtin. Bu örnekte CA anahtarı sizin oluşturduğunuz anahtardır.
  • -I id_username - imzalı kullanıcının ortak anahtarına atamak istediğiniz kimliği belirtin. id_username değerini istediğiniz adla değiştirin.
  • -V +4w - bu parametre imzalı anahtarın geçerlilik süresini belirtir. Bu örnekte +4w, imzalı kullanıcı anahtarının dört hafta boyunca geçerli olacağı anlamına gelir. Bu değeri tercih ettiğiniz geçerlilik süresine göre değiştirebilirsiniz.
  • -n kullanıcı adı - bu, imzalı genel anahtarın sahibi olacak kullanıcı adıdır.
  • - bu, kullanıcının ortak anahtarının imzalanacağı konumdur (Windows).
ssh-keygen -s C:\ProgramData\ssh\ca_userkeys -I id_username -V +4w -n username ~/id_rsa.pub

Komutu SSH oturumunuzda çalıştırdıktan sonra aşağıda gösterildiği gibi benzer bir çıktı almalısınız. Gördüğünüz gibi komut, imzalı kullanıcı sertifikası olan id_rsa-cert.pub adında yeni bir dosya oluşturdu.

3. Şimdi yerel bilgisayarınızın PowerShell oturumuna geri dönün ve id_rsa-cert.pub dosyasını sunucudan yerel bilgisayarınıza kopyalayın. Komutu çalıştırmadan önce kullanıcı adını ve IP adresini doğru değerlerle değiştirin.

scp [email :id_rsa-cert.pub ((Resolve-Path ~/.ssh/).Path)

Kopyalama tamamlandıktan sonra imzalı kullanıcı sertifikasını aşağıda gösterildiği gibi ana klasörünüzde bulacaksınız.

Sertifika Kimlik Doğrulamasını kullanarak SSH'ye bağlanma

Sertifika kimlik doğrulamasını yapılandırdınız ve artık kullanıcı sertifikanız var. Şimdi SSH sunucusuna sertifika kimlik doğrulamasıyla bağlanıp bağlanamadığınızı test etmelisiniz.

SSH'ye sertifikayla bağlanma komutu, şifre veya ortak anahtar kullanmakla aynıdır. Ancak daha önce genel anahtar kimlik doğrulamasını etkinleştirdiyseniz önce onu devre dışı bırakın. Aksi halde ssh, sertifikanız yerine anahtar çiftinizi kullanmaya devam edecektir.

Anahtar çiftinizi devre dışı bırakmak için genel anahtarınızı administrators_authorized_keys dosyasından kaldırın. Bunu yapmak için şu adımları izleyin.

Sonraki komutların tüm admins_authorized_keys dosyasını boşaltacağını ve eşlenen tüm genel anahtarları etkili bir şekilde kaldıracağını unutmayın. Eşlenen tüm ortak anahtarları temizlemek istemiyorsanız seçilen ortak anahtarları her dosyadan manuel olarak kaldırmak için bir metin düzenleyici kullanın.

Windows Sunucusuna SSH uygulanırken:

1. administrators_authorized_keys dosyasını boşaltmak için PowerShell'de aşağıdaki kodu çalıştırın.

# Clear the administrators_authorized_keys file
 $NULL > C:\ProgramData\ssh\administrators_authorized_keys
# Confirm that the administrators_authorized_keys is empty
 Get-Content C:\ProgramData\ssh\administrators_authorized_keys

2. Bu noktada aşağıdaki ekran görüntüsünde görebileceğiniz gibi yetkili_anahtarlar ve yöneticiler_yetkili_anahtarlar dosyaları boştur.

3. SSH oturumunuzla bağlantıyı kesmek için exit yazın ve Enter tuşuna basın. PowerShell oturumunuza geri döneceksiniz.

4. Genel anahtarları kaldırdıktan sonra, bir sonraki ssh oturum açma denemenizde sertifika kimlik doğrulaması kullanılacaktır. Oturum açma deneyimi genel anahtar kimlik doğrulamasıyla aynı olacaktır.

Çözüm

Artık, çeşitli kimlik doğrulama araçlarını keşfetmeye ve ayarlamaya kadar sıfırdan bir OpenSSH Windows Sunucusu kurdunuz. Artık Windows Sunucularınıza tam olarak Linux'ta bağlandığınız gibi bağlanabilirsiniz!

İlgili makaleler