Управление паролями / ключами для нескольких машин в emacs

10

Я вхожу в многочисленные машины как часть моей работы (+ - 20 в день). Я провожу всего несколько дней / недель с каждой машиной. Отличный ftp только.

Для беспрепятственного доступа Tramp удивителен, но управление доступом к этим серверам вручную стало утомительным.

Я управляю .netrc и .ssh / config вручную, вместе с любыми ключами. Часто пароль / ключ меняются во время моего пребывания на машине, и мне придется заново редактировать файлы.

Есть ли эффективное решение для управления (машины / пароли / ключи) из Emacs?

Гамбо
источник

Ответы:

7

Я использую простой менеджер паролей, который называется pass . Он предлагает простой интерфейс командной строки, который идеально подходит для интеграции с Emacs. Резервное хранилище - это GIT-репозиторий с шифрованием GPG. На самом деле он поставляется с пакетом 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)))))
stsquad
источник
Pass не совсем то, что я искал, но я выбрал твой ответ, потому что чувствую, что это крайний случай. Но ваш ответ гораздо полезнее для сообщества.
Гамбо
@Gambo хорошо, как git-репо, его довольно легко распространять. Вы должны распространять ключи, хотя. Я не экспериментировал с его поддержкой нескольких клавиш.
Stsquad
3

Tramp использует бэкэнд auth-sources для управления паролями. Для этого нужны специальные записи в .authinfo, например

 machine melancholia port scp login daniel password geheim

Подробнее читайте в руководстве по Tramp, глава «Обработка пароля».

У auth-sources также есть некоторая функциональность для создания паролей на лету. Я никогда не пробовал эту функциональность с Tramp, но, возможно, вы немного разберетесь.

Майкл Альбинус
источник
Начиная с Tramp 2.4.0, Tramp также сохраняет новые пароли через источники аутентификации.
Майкл Альбинус