Megosztás a következőn keresztül:


Kulcsalapú hitelesítés a Windows OpenSSH-ban

A Windows-környezetekben a legtöbb hitelesítés felhasználónév-jelszó pár használatával történik, amely jól működik a közös tartományt használó rendszerek esetében. Ha különböző IT-környezetekben dolgozik, például helyszíni és felhőalapú rendszerek között, ez a hitelesítés sebezhetővé válik a brute force támadásokkal szemben.

Ehhez képest a Linux-környezetek általában nyilvános/privát kulcspárokat használnak olyan hitelesítésre, amely nem igényel kitalálható jelszavakat. Az OpenSSH olyan eszközöket tartalmaz, amelyekkel támogathatja a kulcsalapú hitelesítést, különösen a következőket:

  • ssh-keygen for generating secure keys.
  • ssh-agent and ssh-add for securely storing private keys.
  • scp and sftp to securely copy public key files during initial use of a server.

Ez a dokumentum áttekintést nyújt arról, hogyan használhatja ezeket az eszközöket Windows rendszeren a kulcsalapú hitelesítés és a Secure Shell (SSH) használatának megkezdéséhez. Ha nem ismeri az SSH-kulcskezelést, határozottan javasoljuk, hogy tekintse át az NIST 7966-os dokumentumát, amely az interaktív és automatizált hozzáférés-kezelés biztonságos rendszerhéjjal (SSH) történő biztonságával kapcsolatos.

Key pairs

A kulcspárok az egyes hitelesítési protokollok által használt nyilvános és titkos kulcsfájlokra vonatkoznak.

SSH public key authentication uses asymmetric cryptographic algorithms to generate two key files—one private and the other public. Minden titkos kulcsfájl egy jelszónak felel meg, és minden körülmények között védettnek kell maradnia. Ha valaki beszerzi a titkos kulcsot, önként bejelentkezhet bármely olyan SSH-kiszolgálóra, amelyhez hozzáférése van. A nyilvános kulcs az SSH-kiszolgálón található, és a titkos kulcs veszélyeztetése nélkül megosztható.

Az SSH-kiszolgáló és az ügyfél kulcsalapú hitelesítéssel összehasonlíthatja a titkos kulcshoz megadott felhasználónév nyilvános kulcsát. Ha a kiszolgálóoldali nyilvános kulcs nem érvényesíthető az ügyféloldali titkos kulcson, a hitelesítés meghiúsul.

A többtényezős hitelesítés kulcspárokkal implementálható egy jelszó megadásával a kulcspár létrehozásakor. További információ: Felhasználói kulcsok létrehozása. A rendszer a hitelesítés során kéri a jelszót. Az SSH-ügyfél a titkos kulcs jelenlétével kombinálva használja a jelszót a felhasználó hitelesítéséhez.

Important

A kulcsalapú hitelesítéssel megnyitott távoli munkamenetek nem rendelkeznek társított felhasználói hitelesítő adatokkal. Ennek eredményeképpen a munkamenet nem képes kimenő hitelesítésre felhasználóként. Ez a viselkedés terv szerint történik.

Hostkulcs generálása

A nyilvános kulcsok speciális hozzáférés-vezérlési listára (ACL) vonatkozó követelményekkel rendelkeznek, amelyek Windows rendszeren csak a rendszergazdák és a rendszerfelhasználók hozzáférését teszik lehetővé. A sshd szolgáltatás első használatakor a gazdagép kulcspárja automatikusan létrejön.

Important

A cikkben szereplő parancsok futtatása előtt telepítenie kell az OpenSSH-kiszolgálót. További információ: Ismerkedés a Windows OpenSSH-val.

Alapértelmezés szerint manuálisan kell kezdenie sshd . Ha úgy szeretné konfigurálni, hogy a kiszolgáló minden újraindításakor automatikusan elinduljon, futtassa a következő parancsokat egy emelt szintű PowerShell-parancssorból a kiszolgálón:

# Set the sshd service to be started automatically.
Get-Service -Name sshd | Set-Service -StartupType Automatic

# Start the sshd service.
Start-Service sshd

Because there's no user associated with the sshd service, the host keys are stored under C:\ProgramData\ssh.

Felhasználói kulcs létrehozása

Kulcsalapú hitelesítés használatához először nyilvános/privát kulcspárokat kell létrehoznia az ügyfél számára. Kulcsfájlokat hozhat ssh-keygen.exe létre, és a következő kulcsgenerálási algoritmusokat adhatja meg:

  • Digitális aláírási algoritmus (DSA)
  • Rivest–Shamir–Adleman (RSA)
  • Elliptikus görbe digitális aláírási algoritmusa (ECDSA)
  • Ed25519

Ha nem ad meg algoritmust, a rendszer az Ed25519-et használja. Ebben a példában erős algoritmust és kulcshosszt kell használni, például ECDSA-t.

Ha kulcsfájlokat szeretne létrehozni az ECDSA-algoritmussal, futtassa a következő parancsot egy PowerShell- vagy parancssori ablakban az ügyfélen:

ssh-keygen -t ecdsa

A parancs kimenetének a következő sorokhoz hasonlóan kell kinéznie, kivéve, hogy a username helyére az ön felhasználóneve kerül:

Generating public/private ecdsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_ecdsa):

At the prompt, you can select Enter to accept the default file path, or you can specify a path or file name for your generated keys.

Ezután a rendszer arra kéri, hogy használjon jelszót a titkos kulcsfájlok titkosításához. Általában nem javasoljuk üres jelszó használatát, mert a jelszó a kulcsfájllal együttműködve kétfaktoros hitelesítést biztosít. Ebben a példában azonban üresen hagyhatja a jelszót.

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]-----+

Most már van egy nyilvános/privát ECDSA-kulcspár a megadott helyen. A .pub fájl a nyilvános kulcs, a bővítmény nélküli fájl pedig a titkos kulcs:

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

A titkos kulcsfájl egyenértékű a jelszóval, és ugyanúgy kell védeni, mint a jelszót. A ssh-agent titkos kulcsokat biztonságosan tárolhatja a Windows-fiókjához társított Windows biztonsági környezetben. Ha úgy szeretné konfigurálni a ssh-agent szolgáltatást, hogy a számítógép minden újraindításakor automatikusan elinduljon, és a titkos kulcs tárolásához ssh-add futtassa a következő parancsokat egy emelt szintű PowerShell-parancssorban a kiszolgáló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

Miután hozzáadta a kulcsot a ssh-agent szolgáltatáshoz az ügyfélen, a ssh-agent szolgáltatás automatikusan lekéri a helyi titkos kulcsot, és átadja az SSH-ügyfélnek.

Important

We recommend that you back up your private key to a secure location and then delete it from the local system after you add it to the ssh-agent service. A titkos kulcs nem kérhető le az ügynöktől, ha erős algoritmust használ, például az ECDSA-t ebben a példában. Ha nem fér hozzá a titkos kulcshoz, létre kell hoznia egy új kulcspárt, és frissítenie kell a nyilvános kulcsot minden olyan rendszeren, amellyel kommunikál.

A nyilvános kulcs üzembe helyezése

To use the user key that you created previously, you need to place the contents of your public key (\.ssh\id_ecdsa.pub) on the server into a text file. A fájl neve és helye attól függ, hogy a felhasználói fiók tagja-e a helyi rendszergazdai csoportnak vagy egy standard felhasználói fióknak. A következő szakaszok a standard és a rendszergazda felhasználókat is ismertetik.

Standard user

You need to place the contents of your public key (\.ssh\id_ecdsa.pub) on the server into a text file called authorized_keys in C:\Users\username\.ssh\. A nyilvános kulcsot az OpenSSH scp biztonságos fájlátviteli segédprogrammal vagy a PowerShell használatával másolhatja a fájlba.

A következő kóddal másolhatja a nyilvános kulcsot a kiszolgálóra. Az utolsó sorban cserélje le a username -t a saját felhasználónevére. Kezdetben a rendszer kéri, hogy adja meg a kiszolgáló felhasználói fiókjának jelszavát.

# 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@domain1@contoso.com $remotePowershell

Administrative user

You need to place the contents of your public key (\.ssh\id_ecdsa.pub) on the server into a text file called administrators_authorized_keys in C:\ProgramData\ssh\. A nyilvános kulcsot az OpenSSH scp biztonságos fájlátviteli segédprogrammal vagy a PowerShell használatával másolhatja a fájlba. A fájl ACL-ét úgy kell konfigurálni, hogy csak a rendszergazdák és a rendszerfelhasználók számára engedélyezze a hozzáférést.

A következő kóddal másolhatja a nyilvános kulcsot a kiszolgálóra, és konfigurálhatja az ACL-t. Az utolsó sorban cserélje le a username -t a saját felhasználónevére. Kezdetben a rendszer kéri, hogy adja meg a kiszolgáló felhasználói fiókjának jelszavát.

Note

Ez a példa bemutatja a administrators_authorized_keys fájl létrehozásának lépéseit. Ez a fájl csak rendszergazdai fiókokra vonatkozik. A felhasználó által megadott fájl helyett azt kell használnia a felhasználó profilhelyén belül.

# 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@domain1@contoso.com $remotePowershell

Az operációs rendszer nem angol nyelvű honosított verziói esetében a szkriptet módosítani kell, hogy ennek megfelelően tükrözze a csoportneveket. A csoportnevek engedélyeinek megadásakor előforduló hibák elkerülése érdekében a csoportnév helyett a biztonsági azonosítót (SID) használhatja. A SID lekéréséhez futtassa a következőt Get-LocalGroup | Select-Object Name, SID: . Ha a csoportnév helyett a SID-et használja, azt csillag (*) kell megelőznie. In the following example, the Administrators group uses the SID S-1-5-32-544:

$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"""

Ezek a lépések végrehajtják a kulcsalapú hitelesítés windowsos OpenSSH-val való használatához szükséges konfigurációt. Miután futtatta ezeket a PowerShell-parancsokat, csatlakozhat a sshd gazdagéphez bármely olyan ügyfélről, amely rendelkezik a titkos kulccsal.