Gitlab schlägt ziemlich deutlich vor, die Anmeldung mittels SSH zu machen:
Es wird der OpenSSH-Client verwendet, der in Windows 10 und 11 als optionales Feature installierbar ist. Dazu unter "System" den Punkt "Optionale Features" aufrufen:

Dort auf "Features anzeigen" klicken:
Auf "Verfügbare Features anzeigen" klicken:
Den "OpenSSH Client" auswählen und auf "Hinzufügen" klicken:
Nach der Installation muss der Dienst "OpenSSH-Agent" gestartet werden. Dieser ist in Windows per Default nicht gestartet.
Zuerst muss man ihn bearbeiten und den Starttyp von "Deaktiviert" auf "Manuell" ändern:
Danach kann man den Dienst starten.
Hier dürften alle Komponenten vorhanden sein.
Ich beschriebe hier zwei Wege:
a) Default-Key erzeugen und verwenden
b) Benannten Key erzeugen, so dass man mehrere SSH-Keys parallel verwenden kann
Diese Variante sollte man nur verwenden, wenn keine weiteren SSH-Keys benötigt werden.
Der folgende Befehl erzeugt einen Key mit dem Algorithmus "Ed25519", der aktuell empfohlen wird:
ssh-keygen -t ed25519
Man kann einen Passphrase eingeben, den man sich gut merken sollte. Wird der Passphrase leer gelassen, ist es eventuell nicht nötig, den Private Key im OpenSSH-Agent zu hinterlegen, aber wir wollen ja nach aktuellem Stand der Sicherheit arbeiten ;-).
Ausgabe:
C:\Temp\gitlab>ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\USERNAME/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\USERNAME/.ssh/id_ed25519.
Your public key has been saved in C:\Users\USERNAME/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx USERNAME@RECHNERNAME
The key's randomart image is:
+--[ED25519 256]--+
|... |
|... |
|... |
|... |
|... |
|... |
|... |
|... |
|... |
+----[SHA256]-----+
Diese Variante sollte verwendet werden, wenn weitere SSH-Keys für andere Anwendungsfälle verwendet werden.
Der Key wird mit dem gleichen Befehl erzeugt wie oben. Allerdings wird während der Generierung ein abweichender Pfad bzw. Schlüsselname angegeben (hier: "C:\Users\USERNAME\.ssh\gitlab").
C:\>ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\USERNAME/.ssh/id_ed25519): C:\Users\USERNAME\.ssh\gitlab
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\USERNAME\.ssh\gitlab.
Your public key has been saved in C:\Users\USERNAME\.ssh\gitlab.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx USERNAME@RECHNERNAME
The key's randomart image is:
+--[ED25519 256]--+
|... |
|... |
|... |
|... |
|... |
|... |
|... |
|... |
|... |
+----[SHA256]-----+
Der Pfad sollte immer im Userprofil liegen, da "ssh-add" andere Pfade verbietet. Folgendes passierte bei mir, nachdem ich einen Key an einem anderen Pfad speichern wollte:
Permissions for 'C:\irgendein\pfad\gitlab' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Von Hr. Hinkel kam dieser Hinweis: um WSL und Windows verwenden, braucht es zwei verschiedene Keys, einen für Windows und einen für WSL. Es soll nicht versucht werden, denselben Key für beide Systeme zu verwenden. Es kann aber derselbe Key sowohl für GitLab als auch für andere GitLabs oder GitHub verwenden werden, das geht ohne Probleme.
Man geht links oben auf das Benutzerlogo, dann auf "Edit Profile":

Unter "SSH Keys" fügt man den Public Key (Inhalt der Datei "id_ed25519.pub") ein:

Hier muss der Key nur einmalig registriert werden, der Passphrase bleibt über Rechnerneustarts hinweg erhalten.
ssh-add c:\Users\USERNAME\.ssh\id_ed25519
Ausgabe:
Enter passphrase for c:\Users\USERNAME\.ssh\id_ed25519:
Identity added: c:\Users\USERNAME\.ssh\id_ed25519 (USERNAME@RECHERNAME)
Kommt hier ein Fehler "Could not open a connection to your authentication agent.", dann ist der SSH-Dienst nicht gestartet.
Dies muss nach jedem Rechner-Neustart einmalig geschehen, der Key wird nicht dauerhaft gespeichert.
ssh-add ~/.ssh/id_ed25519
Ausgabe:
Enter passphrase for /home/USERNAME/.ssh/id_ed25519:
Identity added: /home/USERNAME/.ssh/id_ed25519 (USERNAME@RECHERNAME)
Troubleshooting:
Es kann diese Meldung kommen:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/USERNAME/.ssh/id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Lösung: hier müssen die Rechte so gesetzt werden, dass keine Leserechte für andere User bestehen:
chmod 400 ~/.ssh/id_ed25519
Bei mir kam bei der ersten Verwendung diese Fehlermeldung:
Could not open a connection to your authentication agent.
Sie besagt, dass der "ssh-agent" nicht läuft.
Der "ssh-agent" muss dann mit diesem Befehl gestartet werden:
eval `ssh-agent`
Ein reiner Aufruf von "ssh-agent" reichte nicht aus.
Bei meinem ersten Versuch war dieser Aufruf in jeder neu geöffneten Shell nötig. Nach einem Rechner-Reboot startete er allerdings automatisch.
Wie oben: man gibt den Pfad zum Key an.
ssh-add c:\Users\USERNAME\.ssh\gitlab
Zusätzlich muss man diesen Key an das Repository "gitlab.cs.hs-rm.de" binden. Ansonsten werden evtl. andere Keys verwendet, und die Anmeldung schlägt fehl. Dazu die Datei "C:\Users\USERNAME\.ssh\config" anlegen mit diesem Inhalt:
Host gitlab.cs.hs-rm.de
HostName gitlab.cs.hs-rm.de
IdentityFile "C:\Users\USERNAME\.ssh\gitlab"
Das Clonen des Repositories kann mit diesem Befehl erfolgen:
git clone git@gitlab.cs.hs-rm.de:USERNAME/REPOSITORYNAME.git
Hier muss man die Passphrase für den SSH Key angeben, den man bei der Generierung vergeben hat (außer man hätte das "core.sshCommand" global gesetzt).
Nach dem Clone ins Verzeichnis des Repositories wechseln und folgenden Befehl ausführen:
git config core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
Achtung: der Pfad enthält wirklich die Linux-Slashes, keine Windows-Backslashes! Mit letzteren gibt es Syntaxfehler.
Dieser Befehl gilt nur für das aktuelle Repository, muss also für jedes Repository erneut ausgeführt werden. Alternativ kann auch der Befehl "git config --global core.sshCommand ..." verwendet werden, der die Einstellung rechnerweit setzt. Ich denke dies ist hier vertretbar, da es vermutlich keinen Grund gibt, unterschiedliche SSH-Versionen in unterschiedlichen Git-Repositories zu verwenden.
Mit folgendem Befehl kann man sich die im SSH Agent registrierten Keys anzeigen lassen:
ssh-add -l
Etwas mehr Infos erhält man mit:
ssh-add -L
Mit folgendem Befehl wird der Key am übergebenen Pfad aus dem SSH Agent entfernt:
ssh-add -d "c:\Users\USERNAME\.ssh\gitlab"
Mit diesem Befehl kann eine Testanmeldung an Gitlab durchgeführt werden. Durch den Zusatz "-v" werden Diagnoseinformationen angegeben, und man sieht zum Beispiel, welche Key-Datei verwendet wird.
ssh -T git@gitlab.cs.hs-rm.de -v