読者です 読者をやめる 読者になる 読者になる

Lambdaカクテル

DESCRIBING: Scala, Akka, P2P, Scheme, Political sth., etc.

OpenPGP Card v2.1 + gnupg 2.1.xでカードの鍵を用いたssh接続を行うには

pgp openpgp card gpg ssh

スマートカードSSHログインするというマニアな分野ですが、GPG2.1.xを使っていたら案外つまづいたので備忘録としてメモします。(GPG2.1.xは最高)

前提

  • OpenPGP Card v2.1 (既にカードに認証用の鍵が格納されているという前提; そのうちハウツーを書きます)
  • スマートカードリーダ(PC USB-TR)
  • GnuPG 2.1.x

やりかた

~/.gnupg/gpg.confgpg-agentを使わせる。

$ echo "use-agent" >> ~/.gnupg/gpg.conf

gpg-agentの設定を行う。gnupg 2.1.xからgpg-agentの仕様が変わっているので、2.0.x向けの設定とはやや違う。

# ~/.gnupg/gpg-agent.conf
...

enable-ssh-support
write-env-file
default-cache-ttl-ssh 43200 # ここはお好みの値で

ssh-agentに代わってgpg-agentを使うための設定を行う。

# ~/.bash_profileなど
...
GPG_TTY=$(tty)
export GPG_TTY

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
  export SSH_AUTH_SOCK="${HOME}/.gnupg/S.gpg-agent.ssh"
fi

ここでもろもろの設定(環境変数、gpg-agentの設定)をリロードするためにマシンを再起動(ログアウト)する。

sshがOpenPGP Cardの鍵を認識するか確認する。

$ ssh-add -l
...
4096 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx cardno:0005xxxxxxxx (RSA) # これが出たらカードの鍵を認識できている

$ ssh-add -L
...
# 以下を接続したいホストのauthorized_keysに追記する
ssh-rsa AAAAB3Nza.....略.....phiQ== cardno:0005xxxxxxxx

参考

これで動作確認しました: