私はGPGキーをスマートカードに保存するためにOpenPGPアプレットと一緒にYubiKey NEOを実行しています。スタートアップエントリを削除して、他のすべてのSSHおよびGPGエージェントを手動で停止しました(デフォルトのOS Luna、Ubuntu 12.04)。
scdaemon
その後、環境変数をエクスポートしながらプロセスを開始しました。
$ scdaemon --daemon
SCDAEMON_INFO=/tmp/gpg-zKwfGU/S.scdaemon:13142:1; export SCDAEMON_INFO;
$ SCDAEMON_INFO=/tmp/gpg-zKwfGU/S.scdaemon:13142:1; export SCDAEMON_INFO;
その後、プロセスを開始してgpg-agent
環境変数を再エクスポートしました。
$ gpg-agent --enable-ssh-support --daemon --write-env-file "${HOME}/.gpg-agent-info"
GPG_AGENT_INFO=/tmp/gpg-9UaXHX/S.gpg-agent:13322:1; export GPG_AGENT_INFO;
SSH_AUTH_SOCK=/tmp/gpg-WAYxYZ/S.gpg-agent.ssh; export SSH_AUTH_SOCK;
SSH_AGENT_PID=13322; export SSH_AGENT_PID;
$ GPG_AGENT_INFO=/tmp/gpg-9UaXHX/S.gpg-agent:13322:1; export GPG_AGENT_INFO;
$ SSH_AUTH_SOCK=/tmp/gpg-WAYxYZ/S.gpg-agent.ssh; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=13322; export SSH_AGENT_PID;
これでSSHサーバーに接続します。
$ ssh [email protected]
Permission denied (publickey).
奇妙な。
次のssh
プロセスを実行しようとするとgpg-agent
機能します™:
$ gpg-agent --enable-ssh-support --daemon ssh [email protected]
期待どおりに PIN を入力するよう求められ、pinentry
接続に成功しました。
私のスマートカードをSSHキーとしてシームレスに使用するには何が不足していますか?通貨ssh
の前に貼る必要がないようにする方法はありますかgpg-daemon
? Bashエイリアスを作成できることを知っていますが、実際に問題は解決されません。
修正する
gpg-agent
問題の一部がそれなしで自然に始まったことがわかり、--enable-ssh-support
それが問題の一部であるようでした。システムコントロールパネルの起動アプリケーションには表示されませんが、ログインしたユーザーとして自動的に実行されます。内部ではありません/etc/xdg/autostart
。どこで見つけて無効にできますか?その間、私のスタートアップアプリでは以下を実行しました。
killall -9 gpg-agent && gpg-agent --enable-ssh-support --daemon \
--sh --write-env-file=$HOME/.gpg-agent-info
その後、ファイルをインポートして環境変数をエクスポートすると機能します。
鉱山には~/.gnupg/gpg-agent.conf
すでに行が含まれていますがenable-ssh-support
効果がないようです。
gpg-agent
ログイン時に他のプロセスが起動しないようにするには?
答え1
gpg-agent
プロセスが開始されたことがわかりました。 DEBパッケージで提供されるファイルは次のとおりですgpg-agent
。
/etc/X11/Xsession.d/90gpg-agent:
: ${GNUPGHOME=$HOME/.gnupg}
GPGAGENT=/usr/bin/gpg-agent
PID_FILE="$GNUPGHOME/gpg-agent-info-$(hostname)"
if grep -;s '^[[:space:]]*use-agent' "$GNUPGHOME/gpg.conf" "$GNUPGHOME/options" &&
test -x $GPGAGENT &&
{ test -z "$GPG_AGENT_INFO" || ! $GPGAGENT 2>/dev/null ; }; then
if [ -r "$PID_FILE" ]; then
. "$PID_FILE"
fi
# Invoking gpg-agent with no arguments exits successfully if the agent
# is already running as pointed by $GPG_AGENT_INFO
if ! $GPGAGENT 2>/dev/null; then
STARTUP="$GPGAGENT --daemon --sh --write-env-file=$PID_FILE $STARTUP"
fi
fi
私はこのスクリプトをよりシンプルで効率的なものに置き換えました。
if [ ! -z "$(pgrep gpg-agent)" ]; then
$GPGAGENT --daemon --enable-ssh-support --sh --write-env-file=$PID_FILE
fi
これにより、SSHサポートが常に提供されます。なぜSSHサポートの有効化をgpg-agent
検討していないのかわかりませんが、~/.gnupg/gpg-agent.conf
この解決策がうまくいくのでうれしいです。