Manajemen Kata Sandi / Kunci untuk beberapa mesin di emacs

10

Saya masuk ke banyak mesin sebagai bagian dari pekerjaan saya (+ - 20 per hari). Saya hanya menghabiskan beberapa hari / minggu dengan masing-masing mesin. Banyak yang menjalankan ftp saja.

Untuk akses tanpa batas, Tramp memang luar biasa, tetapi pengelolaan akses server ini dengan tangan menjadi membosankan.

Saya mengelola .netrc dan .ssh / config dengan tangan, bersama dengan tombol apa pun. Seringkali kata sandi / kunci akan berubah selama waktu saya dengan mesin, dan saya harus mengedit ulang file.

Apakah ada solusi yang efektif untuk mengelola (mesin / kata sandi / kunci) dari dalam emacs?

Gambo
sumber

Jawaban:

7

Saya menggunakan pengelola kata sandi sederhana yang disebut pass . Ini menawarkan antarmuka baris perintah sederhana dengan sangat ideal untuk berintegrasi dengan Emacs. Backing store adalah repo GIT terenkripsi GPG. Ini sebenarnya dikirim dengan paket Emacs meskipun saya tidak menggunakannya. Antarmuka saya sangat sederhana:

(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
sumber
Pass tidak sepenuhnya apa yang saya cari, tetapi saya memilih jawaban Anda karena saya merasa jawaban saya sempurna. Tetapi jawaban Anda jauh lebih bermanfaat bagi komunitas.
Gambo
@ Gambo dan repo git cukup mudah untuk didistribusikan. Anda perlu mendistribusikan kunci. Saya belum bereksperimen dengan dukungan multi-kunci.
stsquad
3

Tramp menggunakan backend auth-sources untuk mengelola kata sandi. Perlu beberapa entri khusus di .authinfo, seperti

 machine melancholia port scp login daniel password geheim

Baca manual Tramp, bab "Penanganan kata sandi", untuk detailnya.

auth-sources juga memiliki beberapa fungsionalitas untuk membuat entri kata sandi on-the-fly. Saya belum pernah mencoba fungsi ini dengan Tramp, tapi mungkin Anda menyelidiki sedikit.

Michael Albinus
sumber
Dimulai dengan Tramp 2.4.0, Tramp juga menyimpan kata sandi baru melalui auth-sources.
Michael Albinus