gpg-agentをssh-agentとして使う
セットアップ
Section titled “セットアップ”ssh コマンドが正しくGPGエージェントのUnixドメインソケットにアクセスできるように、以下のような環境変数が必要となる。
unset SSH_AGENT_PIDif [[ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]]then export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"fiここで gnupg_SSH_AUTH_SOCK_by は誰が設定するのかでいうと、これは gpg-agent —daemon /bin/bash のように gpg-agent を通して起動したプログラムで設定されているものらしい。
GPGのホームディレクトリを変更する手順を実施している場合、gpg-agent-ssh.socket ユニットも変更が必要になる。
あとは gpg-agent.conf でSSHエージェントを有効にする。設定はbrfg/gpg-guideにサンプルが置かれている。
enable-ssh-support既存のSSH秘密鍵をインポートする
Section titled “既存のSSH秘密鍵をインポートする”既存の鍵は、SSH_AUTH_SOCK がGPGエージェントに向いた状態で ssh-add すればいい。取り込む時に、GPGで扱うときのパスフレーズ入力を促されるのでパスフレーズを入力する。
一度登録すると、その鍵は gnupg/private-keys-v1.d 以下にファイルとして残る。ただしこの鍵は ssh -K コマンドではリストされずに gnupg/sshcontrol ファイルに鍵のkeygripが記述される。
$ ls .local/share/gnupg/private-keys-v1.d/BD461A92F8D624C4522D8A12757CCDEE37799A69.key
$ cat ~/.local/share/gnupg/sshcontrolBD461A92F8D624C4522D8A12757CCDEE37799A69 0SSH秘密鍵をGPGサブキー化する
Section titled “SSH秘密鍵をGPGサブキー化する”gpg —edit-key で既存のキーを追加できるらしい。
$ gpg --edit-key --expert C7BF8AB911C50EE3291DD45F1A3BB38A4BC27A81
gpg> addkeyこのとき、既存のキー(13)を選択する。また、マスターキーの秘密鍵も必要になる。
GPG管理の鍵をSSHで使う
Section titled “GPG管理の鍵をSSHで使う”上記と異なり、この方法では gpg -K でも扱える状態となる。まずは A ロールの付いた鍵をエクスポートする。サブキーの追加方法やロールについてはGPG鍵の管理に書いた。
gpg --export-ssh-key [keyname]gnupg/sshcontrol ファイルにkeygripを書く。後ろの数字はキャッシュ期間を秒で指定する。
BD461A92F8D624C4522D8A12757CCDEE37799A69 0この状態で ssh-add -L を実行するとSSHで利用可能な公開鍵のリストを取得できる。
接続できない場合
Section titled “接続できない場合”いくつか要因が考えられる。
- 公開鍵をサービス側に登録していない
- ~/.ssh 以下に接続先の Host エントリがある
公開鍵を登録しておくのは当然として、後者は例えば
Host aur.archlinux.org User lufia IdentitiesOnly yes IdentityFile ~/.ssh/conf.d/aur/id_ed25519のようなエントリがあるとGPGエージェントにアクセスしない。
sshuttleを実行する
Section titled “sshuttleを実行する”手元で実行すれば動作するが、systemdで sshuttle を起動すると sudo を求められてうまく動作しない。これの原因は sudo の実行コマンドが変わっているからなので、systemdでsshuttleを管理するのように書き換える。