−25%

yıllık Windows ödemesinde, 31 Ekim'e kadar. Paketlere git

EQVPS
Hemen başla

Windows Server 2022'ye OpenSSH Server nasıl kurulur (anahtarla giriş, PowerShell kabuğu)

Bir Windows Server 2022 VPS'e yerleşik OpenSSH Server'ı kurun, PowerShell'i varsayılan kabuk yapın, Administrator olarak anahtarla girin ve parola ile girişi kapatın. Anahtarla girişi bozan iki Windows tuzağıyla birlikte.

Windows Server 2022, OpenSSH Server'ı isteğe bağlı bir özellik olarak sunar: üçüncü taraf kurulum programı yok, güncellemeler Windows Update ile gelir. Açıldıktan sonra SSH üzerinden PowerShell çalıştırır, scp ile dosya kopyalar ve betikleri ya da CI'yı sunucuya herhangi bir Linux makinesi gibi yöneltirsiniz.

Aşağıdakilerin hepsini Windows Server 2022 imajımızda, RDP üzerinden yönetici yetkili bir PowerShell'de yaptık (nasıl bağlanılır).

Önce ağ. NAT'lı bir Windows planında tek gelen yönlendirme RDP'ye gider; bu yüzden SSH internetten erişilemez. Dışarıdan SSH için kendi IPv4'ü olan bir plan gerekir, örneğin Windows Small-IP. Port erişilebilir olduğunda aşağıdaki adımlar yaklaşık beş dakika sürer.

1. OpenSSH Server'ı kurun

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

İstemci zaten kuruludur; sunucu siz ekleyene kadar NotPresent görünür. Sunucumuzda kurulum 28 saniye sürdü.

2. Başlatın ve açılışta başlamasını sağlayın

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*

Özelliğin kurulumu OpenSSH-Server-In-TCP güvenlik duvarı kuralını oluşturur (port 22, gelen, izinli); kendiniz eklemeniz gerekmez.

3. PowerShell'i varsayılan kabuk yapın

Varsayılan olarak SSH oturumu cmd.exe içinde açılır. PowerShell'e geçin:

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

Yeni bağlantılar hemen PowerShell 5.1 alır; yeniden başlatma gerekmez.

4. Administrator için anahtar: herkesin takıldığı dosya

Bu, ilk Windows tuzağıdır. Administrators grubundaki hesaplar için sshd C:\Users\<name>\.ssh\authorized_keys dosyasını okumaz. Ortak bir dosyayı, C:\ProgramData\ssh\administrators_authorized_keys dosyasını okur; o da yalnızca Administrators ve SYSTEM dışında kimse yazamıyorsa:

$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

-Encoding ascii de önemlidir. Testimizde aynı anahtar Out-File ile kaydedildiğinde (UTF-16, PowerShell 5.1 varsayılanı) Permission denied (publickey) ile reddedildi. Kendi makinenizden:

ssh Administrator@YOUR.SERVER.IP

Parolasız bir PowerShell istemi almalısınız. Yönetici olmayan kullanıcılar için alışılmış C:\Users\<name>\.ssh\authorized_keys çalışır.

5. Parola ile girişi kapatın: ikinci tuzak

Akla gelen PasswordAuthentication no değişikliği bu sürümde yetmez. OpenSSH 8.1, aynı Windows parolasını soran keyboard-interactive yöntemini sunmaya devam eder. Testimizde anahtarsız giriş, onu da kapatana kadar keyboard-interactive göstermeye devam etti. Ayrıca ayar, dosyanın sonundaki Match Group administrators bloğundan önce olmalıdır; yoksa yalnızca yöneticiler için geçerli olur. Bu komut iki satırı da en üste koyar:

$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd

Mevcut SSH oturumunuzu açık tutun ve ikinci bir terminalden deneyin. Yalnızca parolayla yapılan deneme artık şunu almalıdır:

Permission denied (publickey).

Testimizde hem Administrator hem de normal kullanıcı için sonuç buydu; anahtarla giriş ise çalışmaya devam etti.

Bununla neler yapabilirsiniz

  • Her yerden komut çalıştırmak: ssh Administrator@IP 'Get-Service sshd'.
  • Dosya kopyalamak: scp .\app.zip Administrator@IP:C:/apps/.
  • Portu RDP için olduğu gibi kendi adresinizle sınırlamak: Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.

Hangi plan

Dışarıdan SSH için genel bir IPv4 gerekir: Windows Small-IP (4 vCPU, 4 GB, 50 GB) $28/ay, Windows Medium-IP (6 vCPU, 6 GB) $36/ay. Windows, kendi lisansınızla Server 2022'dir (BYOL nedir). Dört planın tamamı Windows VPS sayfasında. Bir programın bağlantı kesildikten sonra çalışmaya devam etmesi için Windows Server'da 7/24 betik çalıştırma yazısına bakın.

SSS

RDP varken Windows'ta neden SSH?

Betikler ve araçlar SSH konuşur. Sunucuda OpenSSH ile bir Linux makinesinden veya CI işinden PowerShell komutları çalıştırır, scp ile dosya kopyalar ve otomasyonun sunucuyu masaüstü oturumu olmadan yönetmesini sağlarsınız.

Anahtarım normal kullanıcıda çalışıyor ama Administrator'da çalışmıyor. Neden?

Administrators grubunun üyeleri için Windows OpenSSH, ~/.ssh/authorized_keys dosyasını yok sayar ve C:\ProgramData\ssh\administrators_authorized_keys dosyasını okur. Bu dosyaya yalnızca Administrators ve SYSTEM yazabilmelidir; aksi halde sshd onu sessizce atlar.

NAT'lı bir Windows planında SSH'a erişebilir miyim?

Dışarıdan hayır. NAT'lı Windows planında kişisel dış port RDP'ye (3389) yönlendirilir ve bu tek gelen yönlendirmedir. İnternetten SSH için kendi IPv4'ü olan bir Windows planı seçin. Sunucunun içinde OpenSSH yerel araçlar için yine çalışır.

Windows Server 2022 hangi OpenSSH sürümünü kurar?

OpenSSH 8.1p1 for Windows. Bu yüzden parola ayarlarında daha yeni KbdInteractiveAuthentication adı yerine ChallengeResponseAuthentication kullanılır.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.