Bagaimana cara menggunakan gpg-agent seperti dengan ssh-agent + ssh-add?

15

ssh-agentsangat mudah digunakan, saya memulainya dan menambahkan kunci menggunakan ssh-add keyfile. Setelah membunuh proses ssh-agent, semua file hilang.

Bagaimana saya bisa mendapatkan perilaku yang sama gpg-agent? Program terdekat yang saya temukan adalah gpg-preset-passphrase. Tetapi melihat halaman manualgpg-agent , tampaknya direktori dibuat untuk menyimpan kunci pribadi.

Saya bisa saja salah, jadi saya bertanya-tanya bagaimana saya bisa mengatur gpg-agentsedemikian rupa sehingga tidak ada file / direktori yang dibuat? Jika tidak memungkinkan, saran lain untuk membuat gpg-agentkarya seperti ssh-agent+ ssh-addakan diterima juga. Saya tidak mencari solusi GUI seperti Kuda Laut.

Lekensteyn
sumber
sudahkah kamu check out gpg-connect-agent?
Smithamax
@Smithamax tidak, tetapi tampaknya menggunakan fungsi yang sama dari gpg-preset-passphrase. Saya berlari gpg-connect-agent, mendapatkan sebuah shell dan dieksekusi setkey IDOFMYPRIVATEKEYHEREdiikuti oleh preset_passphrasedan id menghasilkan "ERR 67108924 Tidak Didukung <GPG-agent> - no --allow-preset-passphrase"
Lekensteyn

Jawaban:

13

Saya memutuskan untuk melihatnya lagi dan mencari tahu cara kerjanya. GPG menggunakan terminologi "cache" untuk menyimpan kata sandi. Dua kendala dapat dikenakan pada waktu penyimpanan maksimum:

  • Waktu untuk menyimpan frasa sandi sejak kunci awalnya ditambahkan.
  • Waktu untuk menyimpan kata sandi sejak diakses terakhir kali.

Selain itu, ada dua variasi untuk kedua kendala, satu untuk kunci GPG dan satu untuk kunci SSH (jika dukungan diaktifkan).

Entri halaman buku panduan yang relevan dari gpg-agent(1):

   --default-cache-ttl n
          Set  the  time a cache entry is valid to n seconds.  The default
          is 600 seconds.

   --default-cache-ttl-ssh n
          Set the time a cache entry used for SSH keys is valid to n  sec‐
          onds.  The default is 1800 seconds.

   --max-cache-ttl n
          Set the maximum time a cache entry is valid to n seconds.  After
          this time a cache entry will be expired  even  if  it  has  been
          accessed recently.  The default is 2 hours (7200 seconds).

   --max-cache-ttl-ssh n
          Set the maximum time a cache entry used for SSH keys is valid to
          n seconds.  After this time a cache entry will be  expired  even
          if  it has been accessed recently.  The default is 2 hours (7200
          seconds).

Frasa sandi selalu di-cache (dalam memori, bukan pada disk! Diverifikasi dengan repositori git $HOME), jadi tidak perlu secara eksplisit ssh-add. Misalnya, menandatangani data dummy telah memicu cache:

$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)

Untuk membuat perubahan permanen pada pengaturan cache agen gpg, edit ~ / .gnupg / gpg-agent.conf` dan tambahkan sesuatu seperti:

default-cache-ttl  60     # Expire GPG keys when unused for 1 minute
max-cache-ttl     600     # Expire GPG keys after 10 minutes since addition

Saya telah mencoba mengaktifkan dukungan agen SSH dengan menentukan enable-ssh-support, tetapi ini membuat gpg-agent meminta Anda untuk kunci lain untuk mengenkripsi kunci, dan kemudian menyimpan kunci pribadi Anda ~/.gnupg/private-keys.d/. Tidak usah, saya akan tetap menggunakan pendekatan dual ssh-agent / gpg-agent.

Beberapa tips bonus:

  • Setara dengan agen SSH max-cache-ttl-sshdapat ditentukan saat menambahkan kunci, misalnya:ssh-add -t 600 ~/.ssh/id_rsa
  • Untuk mencegah penyimpanan frasa sandi GPG di agen, nonaktifkan agen. Dalam versi GPG yang lebih baru, opsi --no-use-agentini diabaikan, tetapi Anda bisa mencegah agar agen tidak digunakan dengan menghapus variabel lingkungan yang terkait. Beberapa cara untuk melakukannya:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    
Lekensteyn
sumber
mesin saya terus meminta kata sandi berulang kali
jangan terang
@donbright Anda yakin hanya ada satu yang gpg-agentaktif? (Periksa daftar proses, misalnya dengan ps u -C gpg-agent). Apakah batas waktu cache ditetapkan dengan tepat? Jika Anda menggunakannya untuk menandatangani (bukan otentikasi (SSH)), apakah ignore-cache-for-signingopsi ini tidak disetel?
Lekensteyn
Terima kasih. Masalah saya ternyata adalah saya menggunakan gpg 1.4 dan bukannya gpg 2, di ubuntu bisa membingungkan paket mana yang harus Anda instal.
don bright