SSH、tmux、GnuPG エージェントのベスト プラクティス

SSH、tmux、GnuPG エージェントのベスト プラクティス

暗号化ソフトウェアを GnuPG に統合しようとしているのですが、混乱する問題が発生しています。

私の主なユニットはヘッドレス サーバーであり、tmux のみで作業しています。X セッションがないため、pinentry-curses を使用するように gpg-agent を構成しました。次のスクリプトを使用して、ログイン時に ssh-agent エミュレーションで呼び出されるように gpg-agent を構成しました。

if pgrep -u "${USER}" gpg-agent >/dev/null 2>&1; then
    eval `cat $gnupginf`
    eval `cut -d= -f1 $gnupginf | xargs echo export`
else              
    eval `gpg-agent -s --enable-ssh-support --daemon`
fi

すでに gpg-agent に ssh キーを追加していますが、別の ssh セッションを試行するとコマンドがハングします。

gpg-agent を終了して新しいログイン シェルを作成すると、エージェントが期待どおりに動作することがわかりました (pinentry-curses を呼び出して ssh-agent のように動作します)。

ただし、別のログイン シェルを作成し (別の tmux ペインを開くなど)、ssh を実行しようとすると、コマンドがハングし、エージェントを最初に起動したログイン シェルの内容の上に pinentry-curses ウィンドウが印刷されます。

さらに、エージェントを起動したシェルを閉じた場合、pinentry-curses が呼び出され、CPU を圧迫する無限ループが発生します。(既知のバグ、http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559936

本質的には、GnuPG エージェントを ssh-agent と同じようにシームレスに動作させるために、セットアップで何を変更すればよいかを知りたいのです。ご協力いただければ幸いです。

答え1

これは非常に単純なものでした。そのスクリプトを使用する代わりに、古いキーチェーン起動スクリプトから「--agents」オプションを削除しただけです(ガイドここ)。

これにより、Keychain プログラムは ssh-agent ファイルと gpg-agent ファイルの両方を検索します。これで、両方のタイプのエージェントに依存していても、暗号化システムは非常にシームレスに動作するようになりました。

関連情報