gpg-agent を ssh-agent として使う
自分の理想の ssh-agent の動きは
事前に
ssh-addしておかなくとも、実際にsshコマンドが実行されたタイミングでパスフレーズの入力を求める設定可能な一定時間が経過したら、再度パスフレーズの入力を求めるようになる
というもので、 openssh 付属の ssh-agent は 1. が満たせないし、 gnome-keyring は 2. ができない。
が、どうやら gpg-agent がこの動きをしてくれるようなので、使ってみることにする。
使い方
$ eval $(gpg-agent --sh --enable-ssh-support --daemon \
           --default-cache-ttl-ssh 3600 \
           --max-cache-ttl-ssh 10800 \
           --write-env-file ~/.gpg-agent-info)
gpg-agent に --enable-ssh-support をつけて起動すると ssh-agent として振る舞うようになる。 キーがキャッシュされる時間は --default-cache-ttl-ssh, --max-cache-ttl-ssh で指定する。
gpg-agent に接続するために必要な環境変数が ~/.gpg-agent-info に書き込まれるので、 新しく shell を起動したときはこれを読み出す:
$ source ~/.gpg-agent-info
$ export GPG_AGENT_INFO
$ export SSH_AUTH_SOCK
ssh-agent protocol にはどのディスプレイ・端末にユーザーがいるのかを通知する仕組みがないので、 コマンド実行前に毎回 gpg-agent に教えてやるようにする:
# zsh 限定。他の shell での方法は分からん。 preexec() { gpg-connect-agent updatestartuptty /bye > /dev/null }
参考: https://wiki.archlinux.org/index.php/SSH_Keys#GnuPG_Agent