Den Schlüssel erzeugen
ssh-keygen -t ed25519 -C "you@laptop"
Drücken Sie Enter, um die Standarddatei zu übernehmen. Existiert dort bereits ein Schlüssel, geben Sie einen anderen Namen wie C:\Users\you\.ssh\id_ed25519_work an, statt ihn zu überschreiben. Der Kommentar nach -C ist nur eine Bezeichnung und für jeden sichtbar, der den öffentlichen Schlüssel sieht.
Meldet PowerShell, ssh-keygen werde nicht erkannt, fehlt der OpenSSH-Client. Installieren Sie ihn aus einer PowerShell mit erhöhten Rechten:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Ed25519 ist heute die richtige Wahl. Die Unterschiede erklärt SSH-Schlüssel: RSA oder ed25519.
Eine Passphrase wählen
Die Passphrase verschlüsselt die Datei mit dem privaten Schlüssel, eine Kopie der Datei reicht also nicht zur Nutzung. Setzen Sie eine, außer der Schlüssel ist für einen unbeaufsichtigten Job. Sie können sie später ändern, ohne den Schlüssel zu ändern:
ssh-keygen -p -f $env:USERPROFILE\.ssh\id_ed25519
ssh-agent nutzen, damit Sie sie nur einmal tippen
Der Agent-Dienst ist standardmäßig deaktiviert. Aktivieren Sie ihn einmal in einer PowerShell mit erhöhten Rechten:
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
Danach in einer normalen PowerShell, als Ihr eigener Benutzer:
ssh-add $env:USERPROFILE\.ssh\id_ed25519
ssh-add -l
Der zweite Befehl listet die geladenen Schlüssel auf. Meldet ssh-add, es könne sich nicht mit dem Agent verbinden, läuft der Dienst nicht: siehe Could not open a connection to your authentication agent.
Wenn Git weiterhin nach der Passphrase fragt
Git for Windows kann sein eigenes mitgeliefertes SSH verwenden, das den Windows-Agent nicht erreicht. Die Dokumentation von GitHub nennt diese Lösung:
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
Den öffentlichen Schlüssel kopieren
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
Fügen Sie ihn nun dort ein, wo Sie ihn brauchen: bei GitHub oder auf einem Server mit dem PowerShell-Ersatz für ssh-copy-id.
Dateirechte
ssh lehnt einen privaten Schlüssel ab, den andere Benutzer lesen können, mit der Meldung UNPROTECTED PRIVATE KEY FILE. In Ihrem eigenen Ordner .ssh erzeugte Schlüssel haben die richtigen Rechte. Das Problem tritt meist auf, wenn ein Schlüssel von anderswo kopiert wird. Siehe die Lösung für diesen Fehler.
Den Schlüssel sichern oder nicht
Die Datei mit dem privaten Schlüssel ist die einzige Kopie. Verlieren Sie sie, erzeugen Sie einen neuen und ersetzen den öffentlichen Schlüssel auf jedem Server, was oft einfacher ist als ein Backup. Heben Sie doch eines auf, halten Sie es verschlüsselt.
Eine Möglichkeit dafür ist ein SSH-Schlüsselmanager mit verschlüsseltem Vault.
Fragen
Wo speichert ssh-keygen den Schlüssel unter Windows?
In C:\Users\you\.ssh. id_ed25519 ist der private Schlüssel, id_ed25519.pub der öffentliche. Auf Server und zu GitHub gehört nur die .pub-Datei.
Brauche ich zusätzliche Software für einen SSH-Schlüssel unter Windows?
Nein. Windows 10 und 11 enthalten den OpenSSH-Client, ssh-keygen funktioniert also in PowerShell. Fehlt er, fügen Sie die Funktion OpenSSH.Client hinzu.
Wie ändere ich die Passphrase später?
Führen Sie ssh-keygen -p -f mit dem Pfad des privaten Schlüssels aus. Der Schlüssel bleibt derselbe, auf den Servern ändert sich also nichts.
Quellen
- Schlüsselbasierte Authentifizierung in OpenSSH für Windows, Microsoft Learn
- Erste Schritte mit OpenSSH für Windows, Microsoft Learn
- Generating a new SSH key, GitHub Docs
- ssh-keygen(1), OpenBSD-Handbuch