コンテキスト

コンテキスト

コンテキスト

SSHキーの代わりにGPG認証サブキーを使用したいと思います。

gpg-agentまた、これらのキーを管理するためにパスワードキャッシュを使用したいと思います。

私はヘッドレス環境で実行しているので、これをパスワード入力プログラムに使用したいのですが、pinentry-cursesヘッドレス環境で動作するすべてが大丈夫です。

私の開発ワークフローは、複数のセッションやウィンドウで作業し、それらのいずれかのウィンドウで作業tmuxできるようにする方法です。git push

質問

これをしようとすると問題が発生します。pinentry現在のウィンドウにポップアップされるのではなく、他の任意のウィンドウにポップアップが表示されます(またはウィンドウがまったくない場合がありますが、検索するウィンドウが多すぎる可能性があります)。この問題を解決するにはウィンドウを終了する必要がありますが、pinentry-cursesそれでも失敗することがあります。

私が試したこと

私が試した設定

私の現在の構成は次のとおりです。しかし、ここ数週間にわたってこれを働かせようと多くの努力をしました。

# ~/.zshrc

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
  export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi

if [[ $SSH_AUTH_SOCK == /tmp/* ]]; then
    ln -sf $SSH_AUTH_SOCK $HOME/.ssh-agent-sock
    export SSH_AUTH_SOCK=$HOME/.ssh-agent-sock
fi

export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye >/dev/null
# ~/.gnupg/gpg-agent.conf

pinentry-program /usr/sbin/pinentry-curses
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
# ~/.gnupg/gpg.conf

use-agent
# ~/.gnupg/sshcontrol

MYFINGERPRINTS
# ~/.ssh/config

Host localhost
ForwardAgent yes
AddKeysToAgent ask

私が試したリンク

アップデート:ジョブの設定(@SystematicFrankにもう一度感謝します)

# ~/.zshrc

export GPG_TTY=$(tty)
# ~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
# ~/.gnupg/gpg.conf

use-agent
# ~/.gnupg/sshcontrol

MYFINGERPRINTS
# ~/.ssh/config

Host localhost
ForwardAgent yes
AddKeysToAgent ask
Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"

答え1

gpg-connect-agent updatestartuptty問題は、pinentryが端末が開かれるたびに呼び出されるため、pinentryが最新のシェルを指していることです。

本当に欲しいのは、最新のシェル端末ではなく、接続したい端末(sshを呼び出すとき)です。

これを行う最も簡単な方法は、接続しているttyで更新コマンドを実行するように.ssh / configに指示することです。これはあなたが逃した魔法の糸です:

Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"

関連情報