ssh-agent + ssh-addと同様にgpg-agentを使用するにはどうすればよいですか?


15

ssh-agent使い方は非常に簡単ssh-add keyfileです。開始してを使用してキーを追加します。プロセスを強制終了するとssh-agent、すべてのファイルが削除されます。

どうすれば同じ動作を得ることができgpg-agentますか?私が見つけた最も近いプログラムはでしたgpg-preset-passphrase。しかし、のマニュアルページをgpg-agent見ると、秘密鍵を保存するためのディレクトリが作成されているようです。

私は間違っている可能性がありますのでgpg-agent、ファイル/ディレクトリが作成されないように設定するにはどうすればよいですか?それが不可能な場合は、+のgpg-agentような作業を行うための他の提案も歓迎します。私はタツノオトシゴのようなGUIソリューションを探していません。ssh-agentssh-add


チェックアウトしましたgpg-connect-agentか?
スミサマックス

@Smithamaxいや、しかし同じ機能を使用しているようgpg-preset-passphraseです。私が走ったgpg-connect-agent、シェルを得たし、実行setkey IDOFMYPRIVATEKEYHEREが続くpreset_passphraseとidの結果「ERR 67108924サポートされていない<GPG-エージェント> -ノー--allow・プリセット・パスフレーズ」
Lekensteyn

回答:


13

私はこれをもう一度見てみることにし、それがどのように機能するかを見つけました。GPGは、パスワードの保存に「キャッシュ」という用語を使用します。最大保管時間には2つの制約を課すことができます。

  • キーが最初に追加されてからパスフレーズを保持する時間。
  • パスフレーズが最後にアクセスされてから保持する時間。

また、GPGキー用とSSHキー用の2つのバリエーションが両方の制約に存在します(サポートが有効になっている場合)。

関連するマニュアルページエントリ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).

パスフレーズは常にキャッシュされます(ディスクではなくメモリに!のgitリポジトリで検証されます$HOME)ので、明示的な必要はありませんssh-add。たとえば、ダミーデータに署名すると、すでにキャッシュがトリガーされます。

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

gpg-agentのキャッシュ設定を永続的に変更するには、〜/ .gnupg / gpg-agent.conf`を編集して次のようなものを追加します:

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

を指定してSSHエージェントのサポートを有効にしようとしましたenable-ssh-supportが、これによりgpg-agentがキーを暗号化するために別のキーを要求し、プライベートキーをに保存します~/.gnupg/private-keys.d/。私には行きません、それからデュアルssh-agent / gpg-agentアプローチに固執します。

ボーナスのヒント:

  • max-cache-ttl-sshキーを追加するときに、SSHエージェントに相当するものを指定できます。次に例を示します。ssh-add -t 600 ~/.ssh/id_rsa
  • GPGパスフレーズがエージェントに保存されないようにするには、エージェントを無効にします。新しいGPGバージョンではこのオプション--no-use-agentは無視されますが、関連する環境変数をクリアすることにより、エージェントが使用されないようにすることができます。そうするいくつかの方法:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    

私のマシンはパスフレーズを何度も要求し続けます
明るく

@donbrightアクティブなのは1人だけgpg-agentですか?(たとえば、プロセスリストを確認しますps u -C gpg-agent)。キャッシュのタイムアウトは適切に設定されていますか?(SSH)認証ではなく署名に使用する場合、ignore-cache-for-signingオプションは設定されていませんか?
Lekensteyn

ありがとう。私の問題は、ubuntuでgpg 2ではなくgpg 1.4を使用していたため、インストールするパッケージが混乱する可能性があることでした。
明るくしない
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.