SSH-Schlüssel
Was sind SSH-Schlüssel, welche Typen gibt es und wie richtet man sie auf Mac, Linux oder Windows ein? Alle Infos und Beispiele.
Wenn Sie über SSH auf ein Remote-Repository pushen oder davon pullen (zum Beispiel über eine [email protected]:...-URL), muss Git Ihre Identität nachweisen, ohne jedes Mal ein Passwort einzugeben. SSH-Schlüssel lösen dieses Problem. Dieses Kapitel erklärt, was ein SSH-Schlüssel ist, wie das Schlüsselpaar funktioniert und wie Sie einen erzeugen und bei einem Remote-Dienst auf macOS, Linux und Windows registrieren.
Was sind SSH-Schlüssel?

Ein SSH-Schlüssel ist ein Zugangsdaten-Mechanismus, der im SSH-Protokoll (Secure Shell) verwendet wird. SSH ist ein Netzwerkprotokoll, mit dem Sie sich sicher von einem Computer auf einen anderen einloggen und Server, Betriebssysteme sowie Konfigurationen über eine verschlüsselte Verbindung verwalten können. Funktional spielen SSH-Schlüssel dieselbe Rolle wie ein Passwort, sind aber weitaus sicherer: Der Schlüssel wird nie über das Netzwerk übertragen, und den privaten Schlüssel aus dem öffentlichen abzuleiten ist rechnerisch nicht machbar.
SSH-Schlüssel kommen immer als Paar, und jedes Paar besteht aus einem öffentlichen Schlüssel und einem privaten Schlüssel:
- Öffentlicher Schlüssel (auch Authorized Key genannt). Diesen können Sie frei weitergeben und zu jedem System hinzufügen, auf das Sie zugreifen möchten. Er legt fest, wer Zugang erhält.
- Privater Schlüssel (auch Identity Key genannt). Dieser bleibt geheim auf Ihrem Rechner und darf niemals weitergegeben werden. Er beweist Ihre Identität gegenüber jedem Server, der den passenden öffentlichen Schlüssel besitzt.
Die beiden sind mathematisch miteinander verknüpft. Ein Server verschlüsselt eine Herausforderung mit Ihrem öffentlichen Schlüssel; nur der Besitzer des passenden privaten Schlüssels kann sie beantworten. So funktioniert die Authentifizierung, ohne jemals ein Geheimnis zu übertragen.
Teilen, versenden oder committen Sie niemals Ihren privaten Schlüssel (~/.ssh/id_ed25519). Nur die Datei, die auf .pub endet, ist dazu gedacht, auf Server und Git-Hosting-Anbieter kopiert zu werden.
Warum SSH-Schlüssel mit Git verwenden
- Kein Passwort bei jedem Push. Sobald der Schlüssel registriert ist, authentifizieren sich
git push,git pullundgit fetchüber SSH automatisch. - Sicherer als Passwörter. Schlüssel können nicht erraten oder per Brute-Force geknackt werden, wie es bei kurzen Passwörtern möglich ist.
- Von vielen Hosts vorausgesetzt. GitHub akzeptiert keine Account-Passwörter mehr für Git-Operationen; SSH-Schlüssel (oder Tokens) sind der Standard.
Um ein Repository mit SSH zu klonen, nachdem Ihr Schlüssel eingerichtet ist, verwenden Sie die git@-Form der URL. Weitere Informationen zur Adressierung von Remotes finden Sie unter Git Clone und Git Remote.
Wie richtet man SSH-Schlüssel ein?
SSH-Schlüssel werden mit einem Schlüsselgenerierungswerkzeug erstellt, fast immer ssh-keygen, das mit dem OpenSSH-Client ausgeliefert wird. Es verwendet kryptografische Algorithmen mit öffentlichem Schlüssel; die gebräuchlichsten sind Ed25519 (modern, kurz, schnell, empfohlen) und RSA. Ältere Algorithmen wie DSA existieren, gelten mittlerweile aber als schwach und sind in aktuellem OpenSSH standardmäßig deaktiviert.
Das Flag -t wählt den Algorithmus. Zwei gängige Optionen:
# Recommended: Ed25519
ssh-keygen -t ed25519 -C "[email protected]"
# Compatibility fallback: RSA with a 4096-bit key
ssh-keygen -t rsa -b 4096 -C "[email protected]"Das Flag -C fügt einen Kommentar hinzu (in der Regel Ihre E-Mail-Adresse), damit der Schlüssel in einer Liste autorisierter Schlüssel leicht identifiziert werden kann.
SSH-Schlüssel auf Mac und Linux erstellen
Beide Betriebssysteme werden mit einem modernen Terminal und dem OpenSSH-Paket ausgeliefert, sodass die Schritte identisch sind.
- Öffnen Sie ein Terminal und führen Sie folgenden Befehl aus:
Schlüsselpaar generieren
ssh-keygen -t ed25519 -C "[email protected]"- Wählen Sie den Speicherort für den Schlüssel. Drücken Sie Enter, um den Standardspeicherort (
~/.ssh/id_ed25519) zu akzeptieren:
Dateispeicherort auswählen
> Enter a file in which to save the key (~/.ssh/id_ed25519): [Press enter]Dadurch werden zwei Dateien erstellt: der private Schlüssel id_ed25519 und der öffentliche Schlüssel id_ed25519.pub.
- Legen Sie eine Passphrase fest. Diese verschlüsselt den privaten Schlüssel auf der Festplatte, sodass selbst eine gestohlene Schlüsseldatei ohne sie nutzlos ist. Sie werden bei jeder ersten Verwendung des Schlüssels in einer Sitzung danach gefragt:
Passphrase festlegen
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]- Fügen Sie den neuen SSH-Schlüssel dem ssh-agent hinzu. Der ssh-agent hält Ihre entschlüsselten privaten Schlüssel im Speicher und signiert Authentifizierungsanfragen in Ihrem Namen, sodass Sie die Passphrase nur einmal pro Sitzung eingeben müssen.
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass der ssh-agent läuft:
SSH-Schlüssel unter Linux
eval "$(ssh-agent -s)"
> Agent pid 59566Wenn der ssh-agent läuft, fügen Sie den neuen SSH-Schlüssel dem lokalen SSH-Agenten hinzu, indem Sie folgenden Befehl ausführen:
SSH-Schlüssel
ssh-add ~/.ssh/id_ed25519(Hinweis: Unter modernem macOS (OpenSSH 8.8+) ist ssh-add -K veraltet. Fügen Sie stattdessen AddKeysToAgent yes in Ihre ~/.ssh/config-Datei ein, um Schlüssel automatisch im Schlüsselbund zu speichern.)
- Kopieren Sie den öffentlichen Schlüssel auf den Remote-Server.
Um den Schlüssel zur Authentifizierung zu verwenden, müssen Sie ihn in die Datei
~/.ssh/authorized_keysdes Remote-Servers eintragen. Führen Sie folgenden Befehl auf Ihrem lokalen Rechner aus:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host- Überprüfen Sie die Verbindung. Testen Sie, ob Sie sich mit Ihrem neuen Schlüssel beim Remote-Server einloggen können:
ssh user@remote_hostSSH-Schlüssel unter Windows erstellen
Sie benötigen Git Bash, um einen SSH-Schlüssel unter Windows zu erstellen. Öffnen Sie Git Bash und führen Sie den folgenden Befehl aus, um den Schlüssel zu generieren:
ssh-keygen -t ed25519 -C "[email protected]"Folgen Sie denselben Eingabeaufforderungen wie oben, um den Dateispeicherort und die Passphrase festzulegen. Nachdem Sie den Schlüssel generiert haben, kopieren Sie ihn mit dem Befehl ssh-copy-id auf Ihren Remote-Server oder Git-Hosting-Dienst, oder fügen Sie den Inhalt von id_ed25519.pub in die SSH-Schlüsseleinstellungen des Dienstes ein.
Ihren Schlüssel zu GitHub, GitLab oder Bitbucket hinzufügen
Ein Git-Host ist kein SSH-Server, den Sie selbst kontrollieren, daher gilt ssh-copy-id hier nicht – stattdessen fügen Sie den öffentlichen Schlüssel über die Web-Oberfläche ein. Geben Sie den öffentlichen Schlüssel aus und kopieren Sie ihn:
cat ~/.ssh/id_ed25519.pubDie Ausgabe ist eine einzelne Zeile, die mit ssh-ed25519 beginnt und mit dem von Ihnen festgelegten Kommentar endet:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... [email protected]Kopieren Sie diese gesamte Zeile und fügen Sie sie in den SSH-Schlüsseleinstellungen Ihres Kontos ein (bei GitHub: Einstellungen → SSH and GPG keys → New SSH key). Überprüfen Sie anschließend die Verbindung:
ssh -T [email protected]Bei einer erfolgreichen Erstverbindung werden Sie gebeten, den Host-Fingerabdruck zu bestätigen, und werden dann mit Ihrem Benutzernamen begrüßt – es wird keine Shell geöffnet, was bei GitHub zu erwarten ist.
Sobald der Schlüssel registriert ist, wechseln Sie Ihren Remote auf die SSH-URL, damit Pushes ihn verwenden:
git remote set-url origin [email protected]:user/repo.gitWeitere Informationen zur Verwaltung von Remote-URLs finden Sie unter Git Remote und zum Senden Ihrer Commits unter Git Push.
Häufige Probleme und Tipps
Permission denied (publickey)bedeutet in der Regel, dass der Host keinen passenden öffentlichen Schlüssel hat oder der Agent Ihren privaten Schlüssel nicht hält. Führen Siessh-add -laus, um geladene Schlüssel aufzulisten, und fügen Sie Ihren Schlüssel bei Bedarf erneut hinzu.- Einen Schlüssel für mehrere Hosts verwenden. Ein einzelnes Schlüsselpaar kann sich bei vielen Servern authentifizieren; Sie benötigen nicht für jedes Projekt einen neuen Schlüssel. Generieren Sie nur dann einen separaten Schlüssel, wenn Sie den Zugriff isolieren möchten.
- Sichern Sie Ihre Schlüssel, nicht nur Ihre Repositories. Der Verlust von
~/.ssh/id_ed25519bedeutet, dass Sie überall neu generieren und neu registrieren müssen. - SSH-Schlüssel authentifizieren Verbindungen; wenn Sie auch nachweisen möchten, wer einen Commit verfasst hat, ist das ein separater Mechanismus – siehe Signing Commits. Für die Ersteinrichtung, siehe Install Git und Git Config.