🔑
GPG鍵をSSH鍵として使う (Apple Silicon対応版)
GPG鍵をSSH鍵として使おうとした際にいつもコケるので備忘録として
- GnuPG をインストールするときに一緒にインストールされる gpg-agent は ssh-agent として使える
- なので、 GPG鍵をSSH鍵の代わりとして運用できる
- GPG鍵とかSSH鍵とかもう考えるのが面倒くさい!って人は一つにまとめてしまえば精神衛生がよくなる!
前提条件
- 私のメインは macOS なので pinentry-mac を使う。
- 他の pinentry を使う際は、コマンドとか手順が変わるので注意
- SSH鍵として使うのは
A
(authentication
) の副鍵を使う。(A
は SSH や TLS における認証に使える)-
gpg -k
またはgpg -K
したときにusage: A
になってる鍵
/Users/lis2a/.gnupg/pubring.kbx ------------------------------- pub ed25519 2023-03-13 [C] CDD5837D99D6BC1D6F5F5CB2002AEC385BEAEBCF sub ed25519 2023-03-13 [S] [expires: 2024-03-12] sub ed25519 2023-03-13 [A] [expires: 2024-03-12] # ←これ
- もしないなら
gpg --edit-key
->addkey
で副鍵を追加する
-
gpg-agent の自動起動
GPG関連のコマンドを実行すると基本的 gpg-agent は自動で立ち上がるが、 ssh-agent として使用する際は自動起動できない。
シェルの設定ファイルに gpg-agent を起動するよう設定する
.zshrc
gpg-connect-agent --quiet /bye
pinentry-mac のインストール
pinentry-mac は GnuPG に付属してこないので手動でインストールする必要がある
# コマンドからインストール
brew install pinentry-mac
# Brewfile を使ってる際は次のコードを入力して brew bundle する
brew "pinentry-mac"
ソケットファイルの場所指定
gpg-agent が参照する SSH用のソケットファイルは ~/.gnupg/S.gpg-agent.ssh
にある。
このソケットファイルへのパスは gpgconf --list-dirs
で取得できるので SSH_AUTH_SOCK
という環境変数として .zprofile
に設定する
.zprofile
SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
SSH鍵として使う鍵の指定
SSH鍵として使いたい鍵の keygrip を ~/.gnupg/sshcontrol
に指定する
keygrip を取得する
gpg -K --with-keygrip
記述する
echo '<KEYGRUP>' >> ${GNUPGHOME:-$HOME/.gnupg}/sshcontrol
再リロード
いっぱい変更したシェルの設定ファイルの再読み込みを行う
source .zshrc
source .zprofile
source .zshenv
SSH鍵を取得する
次のコードで SSH鍵 が吐き出される。
ssh-add -L
Discussion