emacs의 여러 시스템에 대한 비밀번호 / 키 관리 로그인합니다 (+ -20).

나는 직업의 일환으로 하루에 많은 기계에 로그인합니다 (+ -20). 나는 각 기계에 며칠 / 주를 보냈다. 많은 사람들이 ftp 만 실행합니다.

끊김없는 액세스를 위해 Tramp는 놀랍지 만 지루한 서버 액세스를 직접 관리하는 것입니다.

키와 함께 .netrc 및 .ssh / config를 직접 관리합니다. 컴퓨터 사용 중에 비밀번호 / 키가 변경되는 경우가 종종 있으므로 파일을 다시 편집해야합니다.

emacs 내에서 (머신 / 암호 / 키)를 관리하기위한 효과적인 솔루션이 있습니까?



답변

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

답변

Tramp는 auth-sources 백엔드를 사용하여 비밀번호를 관리합니다. .authinfo에 몇 가지 특수 항목이 필요합니다.

 machine melancholia port scp login daniel password geheim

자세한 내용은 Tramp 매뉴얼의 “비밀번호 처리”장을 읽으십시오.

auth-sources에는 암호 항목을 즉석에서 생성하는 기능도 있습니다. 나는 Tramp 로이 기능을 시도한 적이 없지만 조금 조사 할 수도 있습니다.