Dotfiles synchron und Geheimnisse in Gopass halten

Datum: Montag, 9. September 2024

Tag(s): Dotfiles Synchron Geheimnisse Gopass Chezmoi Sync Secrets

Inspiriert von Lösungen, wie Geheimnisse in Unternehmens-DevOps-Umgebungen gehandhabt werden, wollte ich meine Dotfiles auf mehreren Maschinen synchron halten und alle sensiblen Informationen in gopass speichern (das ich vor einiger Zeit anstelle von KeePass zu verwenden begann, da mir die CLI und der Unix / KISS-Aspekt gefallen).

Glücklicherweise bin ich nicht der Erste, der solche Wünsche hat, und ich stieß auf chezmoi, das Ihre Dotfiles für Sie in einem Git-Repo verwaltet und auch Gopass unterstützt.

Es gibt jedoch nicht so viele Artikel darüber, wie man ein solches Setup konkret durchführt, und die vorhandenen sind z.B. für BitWarden - also nicht wirklich für die von mir beschriebenen Werkzeuge.

Lass uns das machen!

Um das von mir beschriebene Setup durchzuführen, sollte man zunächst den offiziellen Installations- und Einführungsleitfäden von Gopass und Chezmoi folgen. Ich werde das hier nicht erklären, da es viele gute Leitfäden gibt (die besten sind die der Entwickler selbst) und weil sich solche Tools auch mit der Zeit ändern und ich diesen Blogbeitrag wahrscheinlich nicht oft aktualisieren werde.

Speichern der Geheimnisse in Gopass

Beim Speichern der Geheimnisse müssen wir darüber nachdenken, wie chezmoi das Geheimnis herausbekommt. Derzeit gibt die gopass-Funktion von chezmoi nur die erste Zeile des Geheimnisses zurück. Das bedeutet, während wir z.B. einen SSH-Privatschlüssel im Rohformat speichern könnten, liest chezmoi nur die erste Zeile des Schlüssels, daher sollten wir den SSH-Privatschlüssel besser zuerst konvertieren.

Wir können den SSH-Privatschlüssel einfach in einer Zeile konvertieren, indem wir folgendes ausführen:

cat id_rsa | base64

Dies gibt eine Zeile des SSH-Privatschlüssels im Base64-codierten Format aus. Dies ist das Geheimnis, das wir in gopass speichern sollten.

Abrufen des Geheimnisses mit chezmoi

Nach dem Einrichten von chezmoi können wir die Dateien hinzufügen, die chezmoi verwalten soll. Für den öffentlichen Teil eines SSH-Schlüssels ist dies recht einfach:

chezmoi add .ssh/id_rsa.pub

Dies fügt den öffentlichen Teil des SSH-Schlüssels zu chezmoi hinzu. Der private Teil ist jedoch etwas kniffliger.

Zuerst sollten wir in das chezmoi-Verzeichnis wechseln mit

chezmoi cd

Dann sollten wir in den Ordner private_dot_ssh gehen, wo wahrscheinlich bereits eine id_rsa.pub-Datei vorhanden ist, aber wir müssen eine private_id_rsa.tmpl-Datei erstellen, um den privaten Schlüssel zu verwalten.

Jetzt sollten wir die Datei mit folgendem Inhalt erstellen:

{{ gopass "SSH/id_rsa" | b64dec }}

Wo “SSH/id_rsa” der Name der Datei in gopass ist und gopass und b64dec chezmoi-Funktionen sind. gopass ist die Funktion, um das Geheimnis aus gopass zu holen, und dann leiten wir es in die b64dec-Funktion weiter, die den Base64-String dekodiert.

Anwenden

Dies ist ein Teil, den ich fast vergessen hätte und der zu Verwirrung führen kann. Wir sollten zuerst git commit und git push unsere Änderungen im Git-Repo ausführen, dann können wir unsere Vorlagendatei testen, indem wir

chezmoi execute-template < private_id_rsa.tmpl

ausführen. Danach ist der wichtigste Schritt,

chezmoi apply

auszuführen, um unsere Änderungen tatsächlich anzuwenden, und wenn Sie chezmoi bereits auf anderen Maschinen mit gopass eingerichtet haben, müssen Sie

chezmoi update

auf diesen anderen Maschinen ausführen, um die Änderungen zu ziehen und direkt anzuwenden.

Das war’s! Jetzt haben wir ein schönes Setup, bei dem wir sensible Daten in gopass speichern und dann unsere Dotfiles auf allen Maschinen mit chezmoi auf dem neuesten Stand halten können.