# Verwendung eines SSH-Keys mit GitHub

Die Verwendung eines SSH-Keys mit GitHub ermöglicht den **passwortlosen Zugriff auf Git-Repositories**. Anstatt einen Nutzer per Nutzername und Passwort auszuweisen, wird die Entwicklermaschine über den SSH-Key authentifiziert.

## Was ist ein SSH-Key?

Bei der [Secure Shell](https://www.ionos.de/digitalguide/server/tools/secure-shell-ssh/ "Secure Shell (SSH)") (SSH) handelt es sich um das **Standard-Tool für verschlüsselten Zugriff auf entfernte Systeme**. SSH ermöglicht das Einloggen auf einem Server von der heimischen Entwicklermaschine aus. Git nutzt SSH als Übertragungsprotokoll und erlaubt lesenden und schreibenden Zugriff auf Remote-Repositories.

Um die **Authentifizierung der Maschine** zu ermöglichen und die Fälschungssicherheit der übertragenen Daten sicherzustellen, kommt eine verschlüsselte Verbindung zum Einsatz. Ohne diese wäre es Fremden möglich, beliebige Änderungen an Repositories vorzunehmen.

Git per SSH nutzt [asymmetrische Verschlüsselung](https://www.ionos.de/digitalguide/server/sicherheit/asymmetrische-verschluesselung/ "Asymmetrische Verschlüsselung") als kryptografisches Verfahren. Dabei wird zunächst ein **Paar aus privatem und öffentlichem Schlüssel erstellt**. Man spricht auch von einem „Public-Private Keypair“. Der private Schlüssel verbleibt auf dem eigenen Rechner. Der öffentliche Schlüssel wird mit dritten Parteien, z. B. GitHub, geteilt.

Nutzt man einen SSH-Key zum Zugriff auf GitHub-Repositories, entfällt die Eingabe eines Kennworts. Generell gilt passwortloses Anmelden als sicherer, da **kein Passwort durch Keylogger oder Trojaner abgegriffen** werden kann. Statt einer Person, die das Passwort kennt, wird eine Maschine authentifiziert, auf welcher der private Schlüssel hinterlegt ist.

Die Nutzung von Git über SSH ist ausgesprochen praktisch. Einmal eingerichtet, erlaubt der SSH-Key dauerhaften Zugriff auf GitHub ohne weiteres Zutun. Auch andere **Protokolle und Dienste** profitieren von [SSH-Keys für eine verschlüsselte Netzwerkverbindung](https://www.ionos.de/digitalguide/server/sicherheit/ssh-keys-fuer-ihre-netzwerkverbindung-nutzen/ "SSH-Keys für Ihre Netzwerkverbindung nutzen"). Neben Git mit SSH lässt sich das sichere SFTP-Protokoll zum Austausch von Dateien mit Servern einsetzen, ohne dass weitere Konfiguration vonnöten wäre.

Die Verbindung mit Git-Repositories erfolgt in der Regel **von der Kommandozeile aus**. Wurde ein SSH-Key eingerichtet, lässt sich problemlos ein Push auf ein eigenes Repository ausführen:

```bash
cd ./folder-with-git-repo/
git push
```

Neben der Anwendung auf der Kommandozeile **profitieren auch GUI-Anwendungen von einem eingerichteten SSH-Schlüssel**. Moderne FTP-Programme unterstützen das [SSH Flie Transfer Protocol (SFTP](https://www.ionos.de/digitalguide/server/knowhow/sftp-ssh-file-transfer-protocol/ "SFTP (SSH File Transfer Protocol)")). Dieses basiert auf SSH und greift auf vorhandene SSH-Schlüssel zurück

## Wie nutzt man SSH-Keys mit GitHub

Um mit einem SSH-Key auf sein GitHub-Konto zuzugreifen, hinterlegt man den öffentlichen Schlüssel bei GitHub. Der private Schlüssel verbleibt auf dem eigenen Rechner. Über einen **Abgleich der Schlüsseldaten** wird die Entwicklungsmaschine gegenüber GitHub authentifiziert. Dies ermöglicht schreibenden Zugriff auf eigene Repositories. Diese Methode funktioniert auch mit [GitHub-Alternativen](https://www.ionos.de/digitalguide/websites/web-entwicklung/github-alternativen/ "GitHub-Alternativen") wie Gitlab oder Bitbucket.

So praktisch SSH-Keys auch sind, muss man beim Umgang Vorsicht walten lassen. **Geben Sie unter keinen Umständen den privaten Schlüssel weiter**. Der private Schlüssel erlaubt u. U. einer anderen Partei, sich als man selbst auszugeben. In Ihrem Namen könnten sich Dritte auf einem Server einloggen oder Code in Repositories ändern.

### Voraussetzungen für Nutzung von mit SSH-Key GitHub

Wir setzen hier voraus, dass Sie **unter einer Linux-artigen Umgebung arbeiten**. Dazu zählen Linux/Unix, macOS, sowie Windows mit installiertem [WSL2](https://www.ionos.de/digitalguide/server/knowhow/wsl2-vorgestellt/ "WSL2 vorgestellt"). Ferner müssen die folgenden Bedingungen erfüllt sein:

- Git installiert
- SSH installiert
- GitHub-Konto angelegt

Überprüfen wir zunächst, ob die lokalen Voraussetzungen erfüllt sind. Mit dem folgenden Befehl **testen wir, ob Git und SSH installiert** sind. Sofern Sie keine Fehlermeldung „git not found“ oder „ssh not found“ erhalten, sind beide vorhanden:

```bash
which git ssh
```

[![Bild: Test der Installation von Git und SSH](https://www.ionos.de/digitalguide/fileadmin/_processed_/6/9/csm_test-git-und-ssh_b4519e8780.webp "Test der Installation von Git und SSH")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/test-git-und-ssh.png) Auf unserem System sind Git und SSH installiert. Beispielshalber suchen wir nach einem nicht existierenden Befehl „unknown“.       Ferner legen wir das .ssh-Verzeichnis im Nutzerordner an, falls es noch nicht existiert:

```bash
mkdir -vp ~/.ssh/
```

Wir erklären im Folgenden, wie Sie einen **SSH-Key für die Nutzung von GitHub anlegen und registrieren**. Ist dieser Schritt abgeschlossen, zeigen wir, wie Sie den öffentlichen SSH-Key bei GitHub hinterlegen und erklären den Zugriff auf Git-Repositories über SSH:

1. SSH-Schlüsselpaar auf dem eigenen System anlegen
2. Öffentlichen SSH-Key bei GitHub hinterlegen
3. Mit SSH-Key auf GitHub-Repository zugreifen

### SSH-Key auf dem eigenen System anlegen und registrieren

Als ersten Schritt werden wir ein **öffentliches / privates SSH-Schlüsselpaar auf unserem lokalen System erzeugen**. Kopieren Sie die dafür genutzten Befehle in der exakt gleichen Reihenfolge und führen Sie diese auf Ihrer Kommandozeile aus.

Wir halten uns hier an die [offizielle Dokumentation](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent "Dokumentation bei GitHub") von GitHub. Das **Verfahren ändert sich von Zeit zu Zeit**. Zum [Beheben von SSH-Fehlern](https://www.ionos.de/digitalguide/server/knowhow/beheben-von-ssh-fehlern/ "Beheben von SSH-Fehlern") kann es also nicht schaden, dort nachzuschauen.

Zunächst starten wir den **SSH-Key Generator, um für GitHub ein öffentliches / privates Schlüsselpaar zu erzeugen**. Wir nutzen den ssh-keygen Befehl, welcher standardmäßig als Teil der OpenSSH-Installation auf dem System vorhanden ist:

Wir rufen ssh-keygen auf der Kommandozeile auf und übergeben drei Optionen:

- Option -f gefolgt von Pfad und Name des neuen Schlüssels
- Option -t gefolgt vom Namen des Algorithmus, in diesem Fall ed25519
- Option -C gefolgt von einer E-Mailadresse als Kommentar

```bash
ssh-keygen -f "$HOME/.ssh/github_id_ed25519" -t ed25519 -C "your_email@example.com"
```

---

### Hinweis

Sie können eine beliebige E-Mailadresse zur Erzeugung des Schlüsselpaars verwenden. Diese dient lediglich als Label; es muss sich nicht um dieselbe Adresse handeln, mit der Sie sich bei GitHub einloggen.

---

Der SSH keygen-Befehl fordert uns auf, eine **„Passphrase“** (zu Deutsch „Passsatz“) für den privaten Schlüssel festzulegen. Anders als ein Passwort darf eine Passphrase Leerzeichen enthalten. Die Passphrase sollte mehrere Wörter lang sein und ist dann gleichermaßen besser zu merken und schwer zu erraten. Für erhöhte Sicherheit baut man einige Ziffern oder Sonderzeichen mit ein. Geben Sie die Passphrase ein und drücken Sie „Enter“. Wiederholen Sie den Prozess, um die Erstellung des SSH-Schlüsselpaars abzuschließen.

[![Bild: Erzeugen eines SSH-Keypairs für GitHub](https://www.ionos.de/digitalguide/fileadmin/_processed_/8/a/csm_ssh-keypairs-github_fccfd0b1e5.webp "Erzeugen eines SSH-Keypairs für GitHub")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/ssh-keypairs-github.png) Wir haben den SSH-Key für die Nutzung mit GitHub erzeugt.       ---

### Tipp

Wir nutzen für unser Schlüsselpaar den Ed25519-Algorithmus. Tatsächlich ist eine ganze Reihe an Algorithmen verfügbar. Wir stellen die [Verschlüsselungsverfahren im Überblick](https://www.ionos.de/digitalguide/server/sicherheit/verschluesselungsverfahren-ein-ueberblick/ "Verschlüsselungsverfahren | Ein Überblick") in einem eigenen Artikel vor.

---

Bevor wir unseren frisch erzeugten SSH-Key mit GitHub nutzen können, führen wir einen weiteren Schritt durch. Dieser ist optional, wird jedoch dringend empfohlen. Wir **fügen den privaten Schlüssel zum sogenannten „SSH-Agent“ hinzu**. Dabei handelt es sich um ein Hintergrundprogramm, welches auf dem lokalen System läuft. Führen Sie den folgenden Befehl auf der Kommandozeile aus und geben Sie die Passphrase ein, wenn Sie danach gefragt werden:

- Windows / Linux

```bash
ssh-add ~/.ssh/github_id_ed25519
```

- macOS bis 11 Big Sur

```bash
ssh-add -K ~/.ssh/github_id_ed25519
```

- macOS ab 12 Monterey

```bash
ssh-add --apple-use-keychain ~/.ssh/github_id_ed25519
```

Der SSH-Agent hat Zugriff auf hinzugefügte private Schlüssel und ermöglicht, diese für **Verbindungen zu nutzen, ohne jedes Mal die Passphrase einzugeben**. Doch der SSH-Agent kann noch mehr:

---

### Zitat

&gt; „ssh-agent is a program that can hold a user's private key, so that the private key passphrase only needs to be supplied once. A connection to the agent can also be forwarded when logging into a server, allowing SSH commands on the server to use the agent running on the user's desktop.“ — Quelle: https://www.ssh.com/academy/ssh/keygen#adding-the-key-to-ssh-agent
&gt;
&gt; Übersetzung: „SSH-Agent ist ein Programm, welches private Schlüssel eines Nutzers vorhält, so dass die Passphrase nur einmal eingegeben werden muss. Eine Verbindung zum SSH-Agenten lässt sich beim Einloggen in einen Server weiterreichen. So können SSH-Befehle auf dem Server den SSHAgenten nutzen, welcher auf dem Arbeitsrechner des Nutzers läuft.“ (übersetzt von IONOS)

---

### SSH-Key bei GitHub hinterlegen

Wir haben ein SSH-Keypair auf unserem lokalen System erzeugt. Damit steht eine Hälfte der verschlüsselten Kommunikation bei der Nutzung von Git über SSH. Der noch verbleibende Schritt besteht darin, den **öffentlichen SSH-Key bei GitHub zu hinterlegen**.

[![Bild: Die Einstellungsseite des GitHub-Kontos](https://www.ionos.de/digitalguide/fileadmin/_processed_/2/1/csm_einstellungen-github-konto_840cb27ca3.webp "Die Einstellungsseite des GitHub-Kontos")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/einstellungen-github-konto.png) Loggen Sie sich in Ihr GitHub-Konto ein und navigieren Sie zur Schlüssel-Seite der Einstellungen.        [![Bild: GitHub-Einstellung zum Hinzufügen eines SSH-Schlüssels](https://www.ionos.de/digitalguide/fileadmin/_processed_/6/b/csm_github-ssh-hinzufuegen_d9e8c18ecf.webp "GitHub-Einstellung zum Hinzufügen eines SSH-Schlüssels")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/github-ssh-hinzufuegen.png) Klicken Sie unter „SSH keys“ auf den Knopf „New SSH key“ und öffnen Sie damit die Seite zum Hinzufügen eines neuen Schlüssels.       Nun benötigen wir den **Inhalt des öffentlichen Schlüssels**. Wechseln Sie zu Ihrer lokalen Kommandozeile und geben Sie den folgenden Befehl ein:

```bash
cat ~/.ssh/github_id_ed25519.pub
```

---

### Hinweis

Vorsicht: der Dateiname eines öffentlichen Schlüssels endet in .pub für „Public Key“. Jedoch endet der private Schlüssel nicht etwa in .priv, oder dergleichen. Stattdessen hat der private Schlüssel keine Endung. Teilen Sie ausschließlich den Public Key-Key mit GitHub und sonstigen Dritten.

---

[![Bild: Inhalt des öffentlichen Schlüssels auf der Kommandozeile](https://www.ionos.de/digitalguide/fileadmin/_processed_/7/a/csm_oeffentlicher-schluessel-kommandozeile_c29701177d.webp "Inhalt des öffentlichen Schlüssels auf der Kommandozeile")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/oeffentlicher-schluessel-kommandozeile.png) Kopieren Sie den ausgegebenen öffentlichen Schlüssel und wechseln Sie zurück zur GitHub-Seite.        [![Bild: Öffentlicher SSH-Key in GitHub-Einstellungsseite kopiert](https://www.ionos.de/digitalguide/fileadmin/_processed_/3/1/csm_ssh-key-in-github-kopiert_d6f167abf9.webp "Öffentlicher SSH-Key in GitHub-Einstellungsseite kopiert")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/ssh-key-in-github-kopiert.png) Fügen Sie den kopierten öffentlichen Schlüssel ein und vergeben Sie optional einen Titel. Speichern Sie die Änderungen mit einem Klick auf den Knopf „Add SSH key“.    [![Bild: Übersicht der hinzugefügten SSH-Keys in GitHub](https://www.ionos.de/digitalguide/fileadmin/_processed_/c/1/csm_uebersicht-ssh-keys-github_b893109fef.webp "Übersicht der hinzugefügten SSH-Keys in GitHub")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/uebersicht-ssh-keys-github.png) Der neu hinzugefügte SSH-Key für GitHub wird Ihnen in der Schlüssel-Übersicht angezeigt.       ###  Mit SSH-Key auf GitHub-Repository zugreifen

Wir haben die Schlüssel lokal erzeugt und den öffentlichen SSH-Key auf GitHub hinterlegt. Testen wir zunächst, ob die Verbindung funktioniert. Wir bedienen uns des folgenden Befehls:

```bash
ssh -T git@github.com
```

Handelt es sich um den **ersten Verbindungsaufbau mit GitHub von dieser Maschine aus**, werden Sie zusätzlich aufgefordert, den Server zu den „Known Hosts“ hinzuzufügen:

[![Bild: Hinzufügen des GitHub-Server zu den SSH Known-Hosts](https://www.ionos.de/digitalguide/fileadmin/_processed_/a/6/csm_github-ssh-known-hosts_9676f97f79.webp "Hinzufügen des GitHub-Server zu den SSH Known-Hosts")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/github-ssh-known-hosts.png) Bestätigen Sie das Hinzufügen des Servers, indem Sie „yes“ eingeben und Enter drücken.       Beim Zugriff auf GitHub-Repositories **unterscheiden wir zwischen lesendem und schreibendem Zugriff**. Öffentliche Repositories lassen sich von jedermann auslesen; dazu wird keinerlei Authentifizierung, also auch kein SSH-Key benötigt.

Zum **Herunterladen eines Repository als lokale Kopie** nutzt man den git clone-Befehl. Wir zeigen das beispielshalber am Repository des beliebten Netzwerk-Tools cURL. Wir besuchen die GitHub-Seite des öffentliche [cURL-Repository](https://github.com/curl/curl "Repository von cURL bei GitHub") und kopieren die Clone-URL:

[![Bild: Übersichtsseite des cURL-Repository](https://www.ionos.de/digitalguide/fileadmin/_processed_/6/8/csm_curl-repositoty_3c1e496ca8.webp "Übersichtsseite des cURL-Repository")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/curl-repositoty.png) Der Code des cURL-Repository in der Übersicht. / Quelle: https://github.com/curl/curl    [![Bild: Clone-Url des cURL-Repository kopiert](https://www.ionos.de/digitalguide/fileadmin/_processed_/e/1/csm_clone-url-curl-repository_f2ec924165.webp "Clone-Url des cURL-Repository kopiert")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/clone-url-curl-repository.png) Wir kopieren die „Clone-URL“ des cURL-Repository. / Quelle: https://github.com/curl/curl       Mit der Clone-URL ausgestattet, wechseln wir zurück zur lokalen Kommandozeile. Wir erzeugen einen Beispielordner repo auf dem Desktop und wechseln zu diesem. Im Anschluss **klonen wir das cURL-Repository**, indem wir git clone mit der Clone-URL aufrufen:

```bash
cd ~/Desktop/
mkdir -p repo && cd repo
git clone https://github.com/curl/curl.git
```

[![Bild: Klonen des cURL-Repository auf der lokalen Kommandozeile](https://www.ionos.de/digitalguide/fileadmin/_processed_/e/6/csm_klonen-curl-repository_8e43e23051.webp "Klonen des cURL-Repository auf der lokalen Kommandozeile")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/klonen-curl-repository.png) Das geklonte cURL-Repository liegt nun im Ordner curl.       Wir **wechseln in den cURL Repository-Ordner** und zeigen mit dem git status-Befehl den Zustand des Repository an:

```bash
cd ~/Desktop/repo/curl/
git status
```

[![Bild: Status des lokalen cURL-Repository](https://www.ionos.de/digitalguide/fileadmin/_processed_/2/c/csm_status-lokales-curl-repository_eb4017fe87.webp "Status des lokalen cURL-Repository")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/status-lokales-curl-repository.png) Der Aufruf von git status zeigt, dass der Zustand normal ist.       Auch der git pull-Befehl, welcher ein Repository auf den neuesten Stand bringt, benötigt lediglich lesenden Zugriff. Wir **führen Git-Pull im Repository-Ordner aus**; prinzipiell funktioniert dies, auch wenn wahrscheinlich noch keine Änderungen vorhanden sind:

```bash
git pull
```

Nun versuchen wir, mit dem git push-Befehl auf das GitHub-Repository zu schreiben:

```bash
git push
```

[![Bild: Ergebnis von Git-Pull und Git-Push des lokalen cURL-Repository](https://www.ionos.de/digitalguide/fileadmin/_processed_/2/9/csm_git-pull-git-push-lokal_c80ec33873.webp "Ergebnis von Git-Pull und Git-Push des lokalen cURL-Repository")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/git-pull-git-push-lokal.png) Git-Pull funktioniert; Git-Push schlägt fehl, da unsere Maschine nicht authentifiziert ist.       Was passiert hier? Die zum Klonen des öffentlichen cURL-Repository **verwendete Clone-URL beginnt mit HTTPS**. Für unseren lokalen Klon ist dementsprechend als „Origin“ („Ursprung“) eine HTTPS-URL hinterlegt. Wir überprüfen das Origin mit dem git show-Befehl:

```bash
git remote -v show
```

[![Bild: Remotes des lokalen cURL-Repository auf der Kommandozeile](https://www.ionos.de/digitalguide/fileadmin/_processed_/a/e/csm_remote-lokales-curls-repository_03cab7ab69.webp "Remotes des lokalen cURL-Repository auf der Kommandozeile")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/remote-lokales-curls-repository.png) Die URLs für die Git-Operationen Fetch und Push werden angezeigt.       Für lesenden Zugriff reicht eine HTTPS-URL, jedoch wird ein **SSH-Key zum Schreiben auf GitHub-Repositories benötigt**. Denn die Authentifizierung von Nutzerinnen und Nutzern per Username/Password [wird auf GitHub seit August 2021 nicht mehr unterstützt](https://github.blog/changelog/2021-08-12-git-password-authentication-is-shutting-down/ "Changelog von Github").

Um **Git-Push dennoch testen zu können, wenden wir einen Trick an**. Zunächst [erzeugen wir auf GitHub](https://github.com/new "Maske zum Erstellen von einem Repository") ein eigenes, leeres Repository:

[![Bild: Neues Repository auf GitHub erstellen](https://www.ionos.de/digitalguide/fileadmin/_processed_/1/4/csm_neues-repository-github_7ffc40fca2.webp "Neues Repository auf GitHub erstellen")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/neues-repository-github.png) Wir erstellen ein neues Repository mit Namen „test“.    [![Bild: Übersicht eines leeren GitHub-Repository](https://www.ionos.de/digitalguide/fileadmin/_processed_/0/a/csm_leeres-github-repository_05e31bbc18.webp "Übersicht eines leeren GitHub-Repository")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/leeres-github-repository.png) Unser leeres GitHub-Repository enthält Anweisungen zum Befüllen mit Code.       Den Anweisungen auf GitHub folgend **ändern wir auf unserem System die Push-URL des lokalen cURL-Klons**, so dass unser leeres GitHub-Repository als Origin verwendet wird. Ferner setzen wir den Branch auf „main“. Im Anschluss führen wir den Git-Push aus; die Operation schließt erfolgreich ab und greift auf unseren vorher angelegten SSH-Key zurück, um uns gegenüber GitHub zu authentifizieren.

```bash
git remote set-url origin git@github.com:<user>/test.git</user>
git branch -M main
git push -u origin main
```

[![Bild: Ändern der Push-URL und Git-Push vom lokalen Repository](https://www.ionos.de/digitalguide/fileadmin/_processed_/d/d/csm_push-url-aendern-lokal_2b6f0d88b0.webp "Ändern der Push-URL und Git-Push vom lokalen Repository")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/push-url-aendern-lokal.png) Der Git-Push funktioniert nach dem Ändern der Push-URL.       ###  Mehrere SSH-Keys für verschiedene GitHub-Konten verwenden

Es ist problemlos möglich, nur **einen SSH-Key für verschiedene GitHub- oder sonstige Konten zu verwenden**. Erinnern wir uns: den öffentlichen Schlüssel können wir bedenkenlos teilen.

Technisch ist es durchaus möglich, **eigene SSH-Keys für verschiedene Services und Sites zu nutzen**. Es bieten sich zwei Methoden an:

1. SSH-Befehl mit Parametern aufrufen
2. SSH-Config-Datei anlegen

SSH-Befehle mit Parametern fallen unter Umständen sehr lang aus, weshalb wir diesen Ansatz hier nicht zeigen. Generell ist es **komfortabler, mit einer SSH-Config-Datei zu arbeiten**. Dies erfordert etwas mehr Aufwand bei der Konfiguration des eigenen Systems, dieser muss jedoch nur einmalig geleistet werden. Hier ein Überblick der an der SSH-Konfiguration beteiligten Ordner und Dateien:

<table>
  <thead>
    <tr>
      <th>SSH-Konfiguration</th>
      <th>Pfad</th>
      <th>Erklärung</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Config-Ordner</td>
      <td>~/.ssh/</td>
      <td>Enthält SSH-Konfiguration und Schlüsselpaare.</td>
    </tr>
    <tr>
      <td>Private Key</td>
      <td>~/.ssh/key-name</td>
      <td>Privater Schlüssel eines Schlüsselpaars.</td>
    </tr>
    <tr>
      <td>Public Key</td>
      <td>~/.ssh/key-name.pub</td>
      <td>Öffentlicher Schlüssel eines Schlüsselpaars.</td>
    </tr>
    <tr>
      <td>Config-Datei</td>
      <td>~/.ssh/config</td>
      <td>SSH-Konfigurationsdatei.</td>
    </tr>
    <tr>
      <td>Known Hosts</td>
      <td>~/.ssh/known\_hosts</td>
      <td>Liste mit in der Vergangenheit verbundenen Hosts.</td>
    </tr>
  </tbody>
</table>

**Legen wir zunächst die SSH-Config-Datei an**. Wir erzeugen die Datei, passen die Nutzerrechte an und öffnen sie im Kommandozeilen-Editor:

```bash
touch ~/.ssh/config
chmod 600 ~/.ssh/config
nano ~/.ssh/config
```

Anschließend **kopieren Sie den folgenden Block in den Editor** und folgen Sie den Screenshots zum Speichern der Datei:

```none
# Github
Host github github.com
    HostName github.com
    User git
    IdentityFile "~/.ssh/github_id_ed25519"
    IdentitiesOnly yes
```

[![Bild: Einfügen der GitHub-Konfiguration in SSH-Config-Datei](https://www.ionos.de/digitalguide/fileadmin/_processed_/e/0/csm_github-konfig-in-ssh-config_af94c2c374.webp "Einfügen der GitHub-Konfiguration in SSH-Config-Datei")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/github-konfig-in-ssh-config.png) Fügen Sie den Konfigurationsblock ein und drücken Sie Strg + X, um die Änderungen zu schreiben und den Editor zu schließen.    [![Bild: Schreiben der geänderten SSH-Config-Datei](https://www.ionos.de/digitalguide/fileadmin/_processed_/7/5/csm_geaenderte-ssh-config_107bb31dc3.webp "Schreiben der geänderten SSH-Config-Datei")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/geaenderte-ssh-config.png) Bestätigen Sie den Namen der Datei, indem Sie Enter drücken.    [![Bild: Bestätigen der Änderungen an der SSH Config-Datei](https://www.ionos.de/digitalguide/fileadmin/_processed_/5/d/csm_bestaetigte-ssh-config_19c694c923.webp "Bestätigen der Änderungen an der SSH Config-Datei")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2022/bestaetigte-ssh-config.png) Bestätigen Sie das Schreiben der Änderungen, indem Sie Enter drücken.       Nach dem Einfügen des GitHub-Konfigurationsblocks lässt sich eine SSH-Verbindung unter Angabe des festgelegten Host-Kürzels github aufbauen:

```bash
ssh -T github
```

Fügen Sie dem dargestellten Schema folgend **Konfigurationsblöcke für weitere Dienste oder Konten in die SSH-Config-Datei ein**. Hier die dabei zum Einsatz kommenden Parameter im Überblick:

<table>
  <thead>
    <tr>
      <th>Einstellung</th>
      <th>Erklärung</th>
      <th>Beispiel</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Host</td>
      <td>Kann mehrere beliebige Namen enthalten.</td>
      <td>github.com github</td>
    </tr>
    <tr>
      <td>HostName</td>
      <td>Hostname des entfernten Systems, auf dem SSH läuft; auch eine IP-Adresse lässt sich nutzen.</td>
      <td>github.com</td>
    </tr>
    <tr>
      <td>User</td>
      <td>Git-Nutzer auf dem entfernten System; muss exakt übernommen werden.</td>
      <td>git</td>
    </tr>
    <tr>
      <td>IdentityFile</td>
      <td>Absoluter Pfad zum privaten Schlüssel. Passen Sie diesen an, falls Sie mehrere Schlüssel verwenden.</td>
      <td>~/.ssh/github\_id\_ed25519</td>
    </tr>
    <tr>
      <td>IdentitiesOnly</td>
      <td>Legt fest, dass für diesen Host der Zugriff nur per Schlüssel erfolgen darf.</td>
      <td>yes</td>
    </tr>
  </tbody>
</table>

Noch ein Tipp zum Abschluss. Falls Sie SSH**-Konfigurationen für mehrere Hosts mit eigenen Schlüsseln anlegen**, sollten Sie am Ende der Datei einen Block mit Einstellungen für nicht aufgeführte Hosts hinzufügen:

```bash
# For all hosts
Host *
IdentitiesOnly no
IgnoreUnknown UseKeychain, AddKeysToAgent
UseKeychain yes
AddKeysToAgent yes
```

Dies erlaubt **Zugriff ohne SSH-Schlüssel auf nicht spezifizierte Hosts**. So können Sie per SSH-Befehl mit ihrem Nutzernamen eine Verbindung zu einem Host aufbauen und das Passwort beim Verbindungsaufbau eingeben:

```bash
ssh user@host
```

Ohne die Zeile „IdentitiesOnly no“ in der abschließenden Konfiguration probiert SSH nacheinander alle Schlüssel in ~./ssh/, um sich mit dem Server zu verbinden. Ist kein passender Schlüssel dabei, kommt es zum Fehler „Too many authentication failures“.


This is a markdown version of: [https://www.ionos.de/digitalguide/websites/web-entwicklung/ssh-key-mit-github/](https://www.ionos.de/digitalguide/websites/web-entwicklung/ssh-key-mit-github/) for AI/LLM consumption.