Blog

Erhöhen Sie Ihre Git-Sicherheit: Signieren von GitHub Commits mit 1Password in Windows WSL und Containern

Marius Boden

Marius Boden

Aktualisiert Oktober 15, 2025
5 Minuten

Heute habe ich mir etwas Zeit genommen, um ssh und Signierschlüssel auf meinem lokalen Entwicklerrechner zu beseitigen und meine Arbeitsabläufe mit 1Password zu sichern. Dies ist ein cloudbasierter, plattformübergreifender Passwortmanager, den ich schon seit Jahren verwende. Er verfügt über großartige Funktionen und eine Vielzahl von Integrationen - perfekt für Sicherheits- und Automatisierungsenthusiasten wie mich :)

Wenn Sie sich fragen, warum Sie Git Commits signieren sollten, empfehle ich Ihnen einen Artikel meines Kollegen .

Ich verwende WSL und VSCode DevContainers intensiv in meiner täglichen Arbeit. Seit der Umstellung von Docker Desktop auf ein kostenpflichtiges Abonnement für Profis verwende ich Docker jedoch innerhalb der WSL. Da die WSL jetzt systemd-Unterstützung bietet, ist dies leicht realisierbar.

Meine Anforderung war eine reibungslose Integration mit Containern und der WSL, um mit git unter Verwendung von ssh zu arbeiten und meine Commits zu signieren.

Haupt

Voraussetzungen

SSH-Schlüssel bereitstellen

Wenn Sie Ihre vorhandenen SSH-Schlüssel verwenden möchten, importieren Sie sie einfach wie hier beschrieben.

Sie können auch neue Schlüssel mit 1Password erstellen.

Wenn Sie Github verwenden und die 1Password-Browsererweiterung installiert haben, kann dies vereinfacht und direkt im Browser durchgeführt werden. Navigieren Sie einfach zu https://github.com/settings/keys und klicken Sie auf Neuer SSH-Schlüssel. Geben Sie ihm einen Titel, wählen Sie den Typ Authentifizierungsschlüssel oder Signierschlüssel und klicken Sie in das Feld. Es wird ein 1Password-Logo angezeigt und Sie erhalten die Option SSH-Schlüssel erstellen.

githubcreatekey_markers

Klicken Sie auf SSH-Schlüssel erstellen, füllen Sie das Formular aus und klicken Sie auf Erstellen & Ausfüllen.

githubcreatekeyform_markers

Fügen Sie schließlich Ihren SSH-Schlüssel zu github hinzu.

githubcreatekeysave_markers

Vergewissern Sie sich, dass Sie einen Authentifizierungsschlüssel und einen Signierschlüssel erstellt haben.

Tasten

Der gleiche Prozess kann auf viele Online-Dienste angewendet werden und ist nicht auf GitHub beschränkt. Ich habe auf die gleiche Weise SSH-Schlüssel für Azure DevOps erstellt.

1Password SSH Agent einrichten

Um SSH-Schlüssel von 1Password abrufen zu können, müssen Sie den 1Password SSH Agent aktivieren. Es gibt eine gute Dokumentation darüber, wie Sie das unter Windows tun können.

Beachten Sie, dass dazu der Windows SSH-Agent deaktiviert werden muss!!!

Standardmäßig stellt 1Password alle Schlüssel in Ihrem privaten Tresor über den SSH-Agenten bereit. Wenn Sie einschränken möchten, welche Schlüssel bereitgestellt werden, folgen Sie der Anleitung zur Konfiguration des 1Password SSH-Agenten.

Testen Sie Ihre Einrichtung, indem Sie die Windows-Befehlszeile aufrufen und ssh-add -l eingeben. Wenn Ihre Schlüssel angezeigt werden, ist alles in Ordnung, andernfalls versuchen Sie einen Neustart.

commandlinesshadd

SSH-Agent in der WSL konfigurieren

Die 1Password-Dokumente bieten Ihnen eine Möglichkeit, den ssh-Agenten in Windows einzurichten, aber es gibt keine Option, den Agenten innerhalb der WSL zu verwenden. Es gibt jedoch eine Abhilfe namens npiperelay. Damit kann die WSL mit Windows-Pipes kommunizieren. Folgen Sie entweder der Installationsanleitung oder laden Sie die Version herunter und entpacken Sie sie in einen beliebigen Ordner, der in Ihrer Windows PATH-Variable konfiguriert ist (oder fügen Sie Ihr eigenes Ziel zum PATH hinzu).

Jetzt sind Sie mit der Windows-Seite fertig. Wechseln wir nun zur WSL.

Installieren Sie zunächst socat, um mit npiperelay Daten zwischen Pipes übertragen zu können.

Erstellen Sie dann eine systemd-Benutzereinheit, die den Stream zum 1Password SSH-Agenten in Windows herstellt. Starten und aktivieren Sie die Einheit, damit sie bei jeder Benutzeranmeldung gestartet wird.

# install socat
sudo apt install socat

# set location of the socket to create
export SSH_AUTH_SOCK=/tmp/1password-agent.sock

# create a systemd unit that is started when the user logs in
sudo tee /etc/systemd/user/1password-ssh-agent.service <<EOT
[Unit]
Description=Connect 1Password SSH Agent from Windows

[Service]
Type=simple
ExecStart=/usr/bin/socat -d -d UNIX-LISTEN:"${SSH_AUTH_SOCK}",fork EXEC:"$(which npiperelay.exe) -ei -s //./pipe/openssh-ssh-agent",nofork
ExecStop=rm -f ${SSH_AUTH_SOCK}
Restart=Always

[Install]
WantedBy=default.target
EOT

# reload systemd
systemctl --user daemon-reload

# start service
systemctl --user start 1password-ssh-agent.service

# set service enabled (start automatic)
systemctl --user enable 1password-ssh-agent.service

# add SSH_AUTH_SOCK to profile so it is set in WSL and devcontainer
cat >> $HOME/.profile <<EOT

# ssh agent bridge
export SSH_AUTH_SOCK=${SSH_AUTH_SOCK}
EOT

Starten Sie Ihre WSL neu und testen Sie Ihre Einrichtung mit ssh-add -l.

commandlinesshaddwsl

Konfigurieren Sie die Git-Signierung in der WSL

Auch hier finden Sie in den 1Password-Dokumenten eine Anleitung für die Konfiguration der Git-Signatur mit der 1Password-App. Die resultierende Konfiguration für meinen Schlüssel sieht wie folgt aus:

[user]
  signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDkemjkTk6/JXBQQcfVKh4pGi8+RPX7LYS0+jmfsIMRY

[gpg]
  format = ssh

[gpg "ssh"]
  program = "C:/Users/MariusBoden/AppData/Local/1Password/app/8/op-ssh-sign.exe"

[commit]
  gpgsign = true

Dies funktioniert perfekt bei der Verwendung von Windows, aber nicht bei WSL.

failwsl

Der Grund dafür ist der Pfad zu op-ssh-sign.exe. Ein erster Ansatz könnte sein, den Pfad für die WSL-Verwendung festzulegen.

[gpg "ssh"]
  program = "/mnt/c/Users/MariusBoden/AppData/Local/1Password/app/8/op-ssh-sign.exe"

Das funktioniert zwar, schlägt aber innerhalb eines Containers fehl, da der erforderliche Programmpfad nicht eingebunden ist.

failvscode

Das Einbinden des Pfads ist keine Option, da devcontainer.json möglicherweise eingecheckt ist und daher auf keinem System mehr funktionieren würde. Die Lösung besteht darin, die Programmspezifikation aus der git-Konfiguration zu entfernen und einige Zeilen in der WSL ssh-Konfiguration hinzuzufügen.

[user]
  signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDkemjkTk6/JXBQQcfVKh4pGi8+RPX7LYS0+jmfsIMRY

[gpg]
  format = ssh

# remove or comment out these lines
#[gpg "ssh"]
#  program = "C:/Users/MariusBoden/AppData/Local/1Password/app/8/op-ssh-sign.exe"

[commit]
  gpgsign = true

Öffnen Sie nun $HOME/.ssh/config und stellen Sie die folgende Konfiguration ein:

Host *
  ForwardAgent yes
  IdentityAgent /tmp/1password-agent.sock

Speichern Sie die Datei und starten Sie Ihren Entwicklungscontainer neu bzw. bauen Sie ihn neu auf. Wenn Sie jetzt versuchen, die Datei zu übertragen, öffnet sich ein Fenster, in dem Sie um die Erlaubnis zur Verwendung von 1Password gebeten werden.

vscodeauth

Klicken Sie auf Autorisieren und identifizieren Sie sich mit Windows Hello.

hellofingerprint

Sie können jetzt signierte Commits in Ihren WSL- und VSCode DevContainern erstellen.

commitedundpushed

Schauen Sie sich Ihren Commit in GitHub an, um Details über den Committer und den verwendeten Schlüssel zu sehen.

verifizierteInformationen_Markierungen

Tags:

Verfasst von

Marius Boden

Marius Boden is passionate about technology and software development. Being a hybrid of developer, architect and DevOps consultant, he can keep track of the big picture and help teams at any point in the development lifecycle to get to the next level.

Contact

Let’s discuss how we can support your journey.