V tomto článku nakonfigurujeme ověřování SSH ve Windows pomocí klíčů RSA pro zabezpečený přístup ke vzdáleným systémům. Ukážeme, jak generovat klíče RSA (certifikáty) ve Windows a nakonfigurovat server OpenSSH v systému Windows 10 / Windows Server 2019 pro autorizaci pomocí klíčů (bez hesel).
Ověřování pomocí SSH klíčů je široce používáno ve světě Linuxu a ve Windows se tato funkce objevila relativně nedávno. Myšlenka je taková, že veřejný klíč klienta je přidán na server SSH a po připojení server zkontroluje odpovídající soukromý klíč pro klienta.
Obsah:
- Generování klíčů RSA na klientovi Windows
- Konfigurace OpenSSH ve Windows pro klíčovou autorizaci
- Přihlášení SSH klíče pro místní správce Windows
Generování klíčů RSA na klientovi Windows
V klientském počítači, ze kterého se budete připojovat ke vzdálenému serveru Windows pomocí OpenSSH, musíte vygenerovat pár RSA klíčů (veřejné a soukromé). Soukromý klíč je uložen na klientovi (nedávejte jej nikomu!) A veřejný klíč je umístěn na serveru SSH v souboru autorizované_keys. Chcete-li vygenerovat klíče RSA na klientovi Windows, musíte nainstalovat klienta OpenSSH.
Ve Windows 10 1809 a Windows Server 2019 je klient OpenSSH nainstalován jako samostatná integrovaná součást:
Add-WindowsCapability -Online -Name OpenSSH.Client ~~~~ 0.0.1.0
Spusťte pravidelnou (neprivilegovanou relaci PowerShell) a vygenerujte pár kláves RSA 2048 pomocí příkazu:
ssh-keygen
Nástroj vás požádá o zadání hesla k ochraně soukromého klíče. Pokud zadáte heslo, budete muset při každém použití tohoto klíče pro autorizaci SSH zadat toto heslo. Nezadal jsem heslo pro klíč (nedoporučuje se).
Nástroj ssh-keygen vytvoří adresář .ssh do profilu aktuálního uživatele Windows (C: \ Users \ your_username) a vložte do něj 2 soubory:
id_rsa
- soukromý klíčid_rsa.pub
- veřejný klíč
Po vytvoření klíčů můžete do služby přidat soukromý klíč Agent SSH, což vám umožní pohodlně spravovat soukromé klíče a používat je pro autentizaci.
Agent SSH může ukládat soukromé klíče a poskytovat je v kontextu zabezpečení aktuálního uživatele. Spusťte službu ssh-agent a nakonfigurujte AutoShell pro spuštění příkazů řízení služeb pomocí PowerShell:
set-service ssh-agent StartupType 'Automatic'
Start-Service ssh-agent
Přidejte svůj soukromý klíč do databáze ssh-agent:
ssh-add "C: \ Users \ youruser \ .ssh \ id_rsa"
Nebo tak:
ssh-add.exe $ ENV: UserProfile \ .ssh \ id_rsa
Konfigurace OpenSSH ve Windows pro klíčovou autorizaci
Nyní je třeba veřejný klíč, který jste vygenerovali v klientovi, zkopírovat na váš server SSH (v tomto příkladu je to vzdálený počítač s Windows 10 1903 a nakonfigurovanou službou OpenSSH).
Již jsme podrobně prozkoumali konfiguraci serveru OpenSSH ve Windows.Zkopírujte soubor id_rsa.pub do katalogu .ssh uživatelský profil, pod kterým se budete připojovat k serveru SSH. Například mám uživatele vytvořeného v systému Windows 10 admin, pak musím zkopírovat klíč do souboru C: \ Users \ admin \ .ssh \ signed_keys.
Klíč můžete zkopírovat na server SSH z klienta pomocí SCP:
scp C: \ Users \ youruser \ .ssh \ id_rsa.pub [email protected]: c: \ users \ admin \ .ssh \ signed_keys
Nyní se můžete připojit k serveru SSH bez zadání uživatelského hesla. A pokud jste pro soukromý klíč nenastavili heslo (přístupové heslo), okamžitě se automaticky připojíte ke vzdálenému serveru Windows..
Chcete-li se připojit přes SSH ke vzdálenému hostiteli, použijte následující příkaz:
ssh (uživatelské jméno) @ (jméno nebo IP adresa SSH serveru)
Například,
To znamená, že se chcete připojit ke vzdálenému serveru SSH s adresou 192,166,90 na účet admin. Služba SSH Agent se automaticky pokusí použít k autorizaci dříve uložený soukromý klíč.
Pokud nechcete použít agent ssh-agent pro správu klíčů, můžete zadat cestu k soukromému klíči, který chcete použít pro autentizaci SSH:ssh [email protected] -i "C: \ Users \ youruser \ .ssh \ id_rsa"
Pokud se vám nepodařilo připojit k vašemu SSH serveru pomocí klíče RSA a stále jste požádáni o heslo, je pravděpodobně uživatel, ke kterému se připojujete, členem místní skupiny administrátorů serveru (SID skupiny S-1-5-32-544). O tom dále.
Přihlášení SSH klíče pro místní správce Windows
OpenSSH používá speciální nastavení přístupu k klíčům pro uživatele s oprávněními místního správce Windows.
Nejprve musíte namísto klíče autorizovaných klíčů v uživatelském profilu použít soubor s klíči C: \ ProgramData \ ssh \administors_aproved_keys. Do tohoto textového souboru musíte přidat klíč (z bezpečnostních důvodů by k tomuto souboru měli mít práva pouze správci a SYSTÉM).
Chcete-li použít klíč autorizovaných klíčů z uživatelského profilu a nepřenášet data veřejného klíče do souboru správců_autorizovaných_klíčů, můžete komentovat řádek v konfiguračním souboru OpenSSH ("C: \ ProgramData \ ssh \sshd_config").
Komentujte řádky:
# Správci skupiny Match # AuthorizedKeysFile __PROGRAMDATA __ / ssh / administratorors_aproved_keys
Navíc v souboru sshd_config můžete povolit přihlášení pomocí klíčů RSA:
PubkeyAuthentication yes
A odepřít přístup pomocí hesla:
PasswordAuthentication no
Po uložení změn do souboru sshd_config nezapomeňte restartovat službu sshd.
restart-service sshd
Další malá nuance. Ve starších verzích OpenSSH jste museli udělit NT Service \ sshd právo číst autorizované_keys.
Chcete-li to provést, proveďte jednu z následujících akcí:
- Nainstalujte modul Opensshutils:
Install-Module - foror OpenSSHUtils -Scope AllUsers
. Chcete-li změnit oprávnění k souboru, spusťte příkaz:Opravit-AutorizovánoKeyPermission -FilePath C: \ Users \ admin \ .ssh \ autor_keys
; - Změnit oprávnění k souborům NTFS pomocí modulu NTFSSecurity nebo icacls;
- Nebo můžete režim deaktivovat v konfiguračním souboru sshd_config StrictModes. Ve výchozím nastavení je tento režim povolen a zakazuje ověřování klíčů, pokud soukromé a veřejné klíče nejsou dostatečně chráněny. Odkomentujte řádek
#StrictModes ano
, změnit naStrictModes no
.
V systému Windows jste tedy nakonfigurovali ověřování SSH pomocí veřejného klíče RSA (certifikát). Nyní můžete tuto metodu ověření použít pro bezpečný přístup ke vzdáleným serverům, automatické zvyšování přesměrování portů v tunelu SSH, spouštění skriptů a dalších automatizačních úkolů.