GPG鍵をSSH鍵の代わりに使う
GnuPGをインストールすると追加されるgpg-agentはssh-agentとしても使用が可能。しかし色々設定が必要。
gpg-agentが自動起動するようにする
本来、gpg-agentはgpg関連のコマンド実行時に必要に応じて自動起動するが、ssh-agentとして使用する場合は自動起動しないので、シェルの設定でgpg-agentを手動で起動するように設定する。このとき、pinentryが使用するttyはgpg-agentを起動したときのttyを使用しようとするため、コマンドを使ってttyの設定を更新する必要がある。なお、ttyを使用しないGUIベースのpinentry(pinentry-macなど)を使用する場合は、ttyの更新は必要ない。
下記のコードを.bashrcや.zshrcなどに記述する。
code:shell
# 通常のpinentryを使用する場合
# ttyを現在のものに設定
export GPG_TTY=$(tty)
# gpg-agentを起動&ttyを更新
gpg-connect-agent --quiet updatestartuptty /bye
# pinentry-macを使用する場合、ttyの設定は不要なので起動のみ行う
gpg-connect-agent --quiet /bye
ソケットファイルの場所を設定する
gpg-agentのssh用のソケットファイルは$GNUPGHOME/S.gpg-agent.sshに存在する。これはgpgconfコマンドから取得できるので、これをSSH_AUTH_SOCKとして設定する。
下記のコードを.bash_profileや.zprofileなどに記述する。
code:shell
SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
SSH鍵として使用するGPG鍵の設定
SSH鍵として使用したいGPG鍵は$GNUPGHOME/sshcontrolにkeygripを記述する必要がある。
code:shell
# --with-keygripでkeygripを一緒に表示させる
gpg -K --with-keygrip
# keygripをsshcontrolに追加する
echo '<KEYGRIP>' >> ${GNUPGHOME:-$HOME/.gnupg}/sshcontrol
確認
シェルの設定ファイルを読み込み直してから行う。
code:shell
ssh-add -L
普通のssh鍵ファイルもssh-addを使用して追加することが可能。