# GitHub Commit-Signierung per SSH

### Disclaimer

<span style="white-space: pre-wrap;">Diese Anleitung zeigt dir, wie du Git-Commits </span>**mit einem SSH-Schlüssel signieren**<span style="white-space: pre-wrap;"> kannst. Das sorgt dafür, dass Plattformen wie GitHub deine Commits als </span>**„Verified“**<span style="white-space: pre-wrap;"> anzeigen, sofern dein öffentlicher Schlüssel dort hinterlegt ist.</span>

<span style="white-space: pre-wrap;">Die Einrichtung erfolgt </span>**zunächst lokal**<span style="white-space: pre-wrap;"> für ein einzelnes Repository – so kannst du dich langsam mit signierten Commits vertraut machen. Eine </span>**globale Konfiguration**<span style="white-space: pre-wrap;"> ist optional am Ende beschrieben.</span>

---

### Voraussetzungen

- [Git](https://git-scm.com/downloads/win)<span style="white-space: pre-wrap;"> ist installiert (</span>`<span class="editor-theme-code">git --version</span>`)
- <span style="white-space: pre-wrap;">Du verfügst über ein </span>[GitHub-Konto](https://github.com/)
- SSH ist auf deinem System verfügbar (`<span class="editor-theme-code">ssh -V</span>`)

---

### Schritt 1: SSH-Schlüssel erzeugen

***Wenn du bereits einen SSH-Schlüssel unter** **`<strong class="editor-theme-bold editor-theme-code editor-theme-italic">~/.ssh/id_ed25519</strong>`** **verwendest, kannst du diesen Schritt überspringen.***

1. Öffne ein Terminal (am besten cmd.exe)
2. Führe folgenden Befehl aus:

```
ssh-keygen -t ed25519 -C "deine@email.de"
```

3. <span style="white-space: pre-wrap;">Drücke Enter, um den Standardspeicherort zu wählen: </span>`<span class="editor-theme-code">~/.ssh/id_ed25519</span>`
4. Optional: Vergib eine Passphrase für zusätzlichen Schutz

---

### Schritt 2: SSH-Schlüssel auf GitHub hochladen

1. <span style="white-space: pre-wrap;">Gehe zu </span>[https://github.com/settings/ssh](https://github.com/settings/ssh)
2. <span style="white-space: pre-wrap;">Klicke auf </span>**"New SSH key"**
3. <span style="white-space: pre-wrap;">Vergib einen sinnvollen </span>**Titel**<span style="white-space: pre-wrap;"> (z. B. </span>**„GitHub\_Sign\_Key“**)
4. <span style="white-space: pre-wrap;">Ändere den </span>**Key type**<span style="white-space: pre-wrap;"> auf "</span>**Signing Key**"
5. Gib deinen öffentlichen Schlüssel im Terminal aus:

```
type %USERPROFILE%\.ssh\id_ed25519.pub
```

5. <span style="white-space: pre-wrap;">Kopiere den gesamten Inhalt (beginnt mit </span>`<span class="editor-theme-code">ssh-ed25519</span>`) und füge ihn bei GitHub ein.
6. <span style="white-space: pre-wrap;">Klicke auf </span>**"Add SSH key"**

---

### <span style="white-space: pre-wrap;">Schritt 3: SSH-Signierung für </span>**ein**<span style="white-space: pre-wrap;"> Repository aktivieren</span>

Wechsle in dein Repository-Verzeichnis und führe folgende Befehle aus:

```
git config commit.gpgsign true
git config gpg.format ssh
git config user.signingkey ~/.ssh/id_ed25519.pub
```

<span style="white-space: pre-wrap;">Das aktiviert die Signaturpflicht für Commits </span>**nur in diesem Repository**.

---

### Schritt 4: Signatur Testen

1. Erstelle eine Testdatei:

```
echo "Signatur-Test" > test.txt
```

2. Commit erstellen:

```
git add .
git commit -m "Signierter Commit per SSH"
```

3. Push auf GitHub:

```
git push origin main
```

<span style="white-space: pre-wrap;">Rufe danach den Commit auf GitHub auf – er sollte mit einem </span>**„Verified“-Badge**<span style="white-space: pre-wrap;"> markiert sein.</span>

---

### Fehlerbehebung

<table id="bkmrk-problemm%C3%B6gliche-ursa"><colgroup><col></col><col></col></colgroup><tbody><tr><th>Problem

</th><th>Mögliche Ursache

</th></tr><tr><td>Commit ist nicht signiert

</td><td>`<span class="editor-theme-code">commit.gpgsign</span>`

<span style="white-space: pre-wrap;"> ist nicht aktiviert oder falscher Schlüsselpfad</span>

</td></tr><tr><td>„Unverified“ auf GitHub

</td><td>Öffentlicher Schlüssel fehlt in GitHub oder ist nicht korrekt hinterlegt

</td></tr><tr><td>Fehlermeldung beim Commit

</td><td>SSH-Agent läuft nicht oder Pfad stimmt nicht

</td></tr></tbody></table>

**Hilfreiche Prüf-Befehle:**

```
git config --get commit.gpgsign
git config --get gpg.format
git config --get user.signingkey
```

---

### Optional: SSH-Signatur global aktivieren

Wenn du deine Commits dauerhaft signieren möchtest, kannst du die Einstellungen global aktivieren:

```
git config --global commit.gpgsign true
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
```

<span style="white-space: pre-wrap;">Das wirkt sich auf </span>**alle**<span style="white-space: pre-wrap;"> zukünftigen Repositories aus.</span>

---

### Abschließender Hinweis

<span style="white-space: pre-wrap;">Wenn ein Projekt Branch-Regeln wie </span>**„Require signed commits“**<span style="white-space: pre-wrap;"> verwendet, </span>**musst**<span style="white-space: pre-wrap;"> du signieren, um Commits pushen zu können. Diese Anleitung hilft dir, diese Voraussetzung sicher zu erfüllen.</span>

<span style="white-space: pre-wrap;">⚠️ Falls du die Commit-Signierung konfiguriert hast und noch unsichere Commits offen hast, musst du diese zurücksetzen oder nachsignieren. Andernfalls wird der nächste Push auf deinen Branch blockiert, sofern dieser </span>**„Require signed commits“**<span style="white-space: pre-wrap;"> aktiviert hat.</span>