emacs中多台机器的密码/密钥管理


10

作为工作的一部分,我登录了许多计算机(每天+-20)。我每台机器只花几天/几周的时间。许多仅运行ftp。

对于无缝访问,Tramp令人惊叹,但是手动管理这些服务器的访问已变得乏味。

我可以手动管理.netrc和.ssh / config以及任何密钥。在使用机器的过程中,密码/密钥通常会更改,因此我必须重新编辑文件。

有没有一种有效的解决方案,可以从emacs中管理(机器/密码/密钥)?

Answers:


7

我使用一个称为pass的简单密码管理器。它提供了一个简单的命令行界面,非常适合与Emacs集成。后备存储是GPG加密的GIT存储库。它实际上附带了Emacs软件包,尽管我不使用它。我的界面很简单:

(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)))))

Pass并不是我一直在寻找的东西,但是我选择了您的答案,因为我觉得我的情况很糟糕。但是您的答案对社区有用得多。
甘博2014年

@Gambo以及git repo都非常容易分发。您确实需要分发密钥。我还没有尝试过多键支持。
stsquad 2014年

3

Tramp使用auth-sources后端管理密码。它需要.authinfo中的一些专门条目,例如

 machine melancholia port scp login daniel password geheim

有关详细信息,请阅读Tramp手册的“密码处理”一章。

auth-sources还具有一些功能,可以即时创建密码条目。我从未尝试过使用Tramp进行此功能,但也许您需要进行一些调查。


从Tramp 2.4.0开始,Tramp还通过auth-sources保存新密码。
Michael Albinus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.