Passwort- / Schlüsselverwaltung für mehrere Computer in Emacs

10

Ich logge mich im Rahmen meiner Arbeit in zahlreiche Maschinen ein (+ - 20 pro Tag). Ich verbringe nur ein paar Tage / Wochen mit jeder Maschine. Viele laufen nur FTP.

Für einen nahtlosen Zugriff ist Tramp erstaunlich, aber es ist die Verwaltung des Zugriffs dieser Server von Hand, die mühsam geworden ist.

Ich verwalte eine .netrc und eine .ssh / config von Hand zusammen mit allen Schlüsseln. Oft ändert sich ein Passwort / Schlüssel während meiner Zeit mit dem Gerät und ich muss die Dateien erneut bearbeiten.

Gibt es eine effektive Lösung für die Verwaltung (Maschinen / Passwörter / Schlüssel) innerhalb von Emacs?

Gambo
quelle

Antworten:

7

Ich benutze einen einfachen Passwort-Manager namens pass . Es bietet eine einfache Befehlszeilenschnittstelle, die sich ideal für die Integration in Emacs eignet. Der Hintergrundspeicher ist ein GPG-verschlüsseltes GIT-Repo. Es wird tatsächlich mit einem Emacs-Paket geliefert, obwohl ich es nicht benutze. Meine Oberfläche ist lächerlich einfach:

(defun my-fixup-gpg-agent (frame)
  "Tweak DISPLAY and GPG_TTY environment variables as appropriate to `FRAME'."
  (when (fboundp 'keychain-refresh-environment)
    (keychain-refresh-environment))
  (if (display-graphic-p frame)
      (setenv "DISPLAY" (terminal-name frame))
    (setenv "GPG_TTY" (terminal-name frame))
    (setenv "DISPLAY" nil)))

(add-hook 'after-make-frame-functions 'my-fixup-gpg-agent)

;; Simple caching
(defvar my-cached-passwords
  nil
  "Cache of passwords. Stored in plain text so you only want to cache
  them if of low value.")

(defun my-pass-password (pass-name &optional cache)
  "Return the password for the `PASS-NAME'."
  (let ((cached-pass (assoc-default pass-name my-cached-passwords)))
    (if cached-pass
        cached-pass
      (when (selected-frame)
        (my-fixup-gpg-agent (selected-frame))
        (let ((new-pass (chomp
                         (shell-command-to-string
                          (format "pass %s" pass-name)))))
          (when (and new-pass cache)
            (add-to-list 'my-cached-passwords (cons pass-name new-pass)))
          new-pass)))))
stsquad
quelle
Pass war nicht ganz das, wonach ich gesucht habe, aber ich habe Ihre Antwort gewählt, weil ich denke, dass meine ein Randfall ist. Aber Ihre Antwort ist für die Community weitaus nützlicher.
Gambo
@Gambo sowie ein Git-Repo ist ziemlich einfach zu verteilen. Sie müssen jedoch Schlüssel verteilen. Ich habe nicht mit der Multi-Key-Unterstützung experimentiert.
stsquad
3

Tramp verwendet das Backend für Auth-Quellen zum Verwalten von Kennwörtern. Es braucht einige spezielle Einträge in .authinfo, wie

 machine melancholia port scp login daniel password geheim

Weitere Informationen finden Sie im Tramp-Handbuch, Kapitel "Umgang mit Passwörtern".

Auth-Quellen verfügen auch über einige Funktionen zum Erstellen von Kennworteinträgen im laufenden Betrieb. Ich habe diese Funktionalität noch nie mit Tramp ausprobiert, aber vielleicht untersuchen Sie sie ein wenig.

Michael Albinus
quelle
Ab Tramp 2.4.0 speichert Tramp auch neue Passwörter über Auth-Quellen.
Michael Albinus