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