Gerenciamento de senha / chave para várias máquinas no emacs

10

Faço login em várias máquinas como parte do meu trabalho (+ - 20 por dia). Passo apenas alguns dias / semanas com cada máquina. Muitos executam apenas ftp.

Para um acesso contínuo, o Tramp é incrível, mas é o gerenciamento manual do acesso desses servidores que se tornou tedioso.

Gerencio manualmente um .netrc e um .ssh / config, juntamente com todas as chaves. Freqüentemente, uma senha / chave muda durante o meu tempo na máquina e terei que reeditar os arquivos.

Existe uma solução eficaz para gerenciar (máquinas / senhas / chaves) no emacs?

Gambo
fonte

Respostas:

7

Eu uso um gerenciador de senhas simples chamado pass . Ele oferece uma interface simples de linha de comando e é ideal para integração com o Emacs. A loja de suporte é um repositório GIT criptografado por GPG. Na verdade, ele vem com um pacote Emacs, embora eu não o use. Minha interface é ridiculamente simples:

(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
fonte
O passe não era exatamente o que eu estava procurando, mas escolhi sua resposta porque sinto que a minha é uma questão de ponta. Mas sua resposta é muito mais útil para a comunidade.
Gambo #
O @Gambo, bem como um repositório Git, é bastante fácil de distribuir. Você precisa distribuir as chaves. Não experimentei o suporte para várias chaves.
Stsquad
3

O Tramp usa o back-end de fontes de autenticação para gerenciar senhas. Ele precisa de algumas entradas especializadas em .authinfo, como

 machine melancholia port scp login daniel password geheim

Leia o manual do Tramp, capítulo "Manuseio de senhas", para obter detalhes.

O auth-sources também possui algumas funcionalidades para criar entradas de senha on-the-fly. Nunca tentei essa funcionalidade com o Tramp, mas talvez você investigue um pouco.

Michael Albinus
fonte
Começando com o Tramp 2.4.0, o Tramp também salva novas senhas através de fontes de autenticação.
Michael Albinus