コンテキスト
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
私が試したリンク
- Xなしでgpg2 pinentryが失敗する
- SSH、tmux、およびGnuPGエージェントのベストプラクティス
- gpg-agentとSSHを使用してPinentryが失敗する
- https://wiki.archlinux.org/index.php/GnuPG#SSH_agent
- https://gist.github.com/andrewlkho/7373190
- https://www.linode.com/docs/security/authentication/gpg-key-for-ssh-authentication/
- https://opensource.com/article/19/4/gpg-subkeys-ssh
アップデート:ジョブの設定(@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"