Dotfiles synchron und Geheimnisse in Gopass halten
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.