Gestion des mots de passe / clés pour plusieurs machines dans emacs

10

Je me connecte à de nombreuses machines dans le cadre de mon travail (+ - 20 par jour). Je ne passe que quelques jours / semaines avec chaque machine. Beaucoup exécutent ftp uniquement.

Pour un accès transparent, Tramp est incroyable, mais c'est la gestion de l'accès à ces serveurs à la main qui est devenue fastidieuse.

Je gère un .netrc et un .ssh / config à la main, avec toutes les clés. Souvent, un mot de passe / clé changera pendant mon temps avec la machine, et je devrai rééditer les fichiers.

Existe-t-il une solution efficace pour gérer (machines / mots de passe / clés) depuis emacs?

Gambo
la source

Réponses:

7

J'utilise un simple gestionnaire de mots de passe appelé pass . Il offre une interface de ligne de commande simple avec est idéal pour l'intégration avec Emacs. Le magasin de sauvegarde est un dépôt GIT crypté GPG. Il est en fait livré avec un package Emacs bien que je ne l'utilise pas. Mon interface est ridiculement simple:

(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
la source
Le pass n'était pas tout à fait ce que je cherchais, mais j'ai choisi votre réponse car je pense que la mienne est un cas de bord. Mais votre réponse est beaucoup plus utile à la communauté.
Gambo
@Gambo ainsi qu'un git repo c'est assez facile à distribuer. Vous devez cependant distribuer les clés. Je n'ai pas expérimenté avec son support multi-clés.
stsquad
3

Tramp utilise le backend auth-sources pour gérer les mots de passe. Il a besoin de quelques entrées spécialisées dans .authinfo, comme

 machine melancholia port scp login daniel password geheim

Lisez le manuel Tramp, chapitre "Gestion des mots de passe", pour plus de détails.

les sources d'authentification ont également des fonctionnalités pour créer des entrées de mot de passe à la volée. Je n'ai jamais essayé cette fonctionnalité avec Tramp, mais vous étudiez peut-être un peu.

Michael Albinus
la source
À partir de Tramp 2.4.0, Tramp enregistre également de nouveaux mots de passe via des sources d'authentification.
Michael Albinus