SSH接続先のOpen DevcontainerでSSH接続元のgpg-agentを使う
Open Devcontainer を SSH 接続先で使う際に、SSH 接続元の GPG エージェントを使用するための設定メモ。
要約
- Open Devcontainer は agent-extra-socket をコンテナに転送するという仕様になっている
- SSH の Unix ドメインソケット転送で、接続元の agent-extra-socket を接続先の agent-socket に転送する
- SSH 接続先で、agent-socket から agent-extra-socket にリンクを張る
Open Devcontainer の仕様
Open Devcontainer がどのようにコンテナに gpg-agent を転送しているかソースコードを確認したところ、ローカルの agent-extra-socket をコンテナに転送していることがわかった1。
GPG エージェントの転送設定
-
ローカル(SSH 接続元)の
~/.ssh/config
で GPG エージェントを転送したいホストの設定にRemoteForward <agent-socket_on_remote> <agent-extra-socket_on_local>
を記載する-
<agent-socket_on_remote>: SSH 接続先で
gpgconf --list-dir agent-socket
を実行して得られた値 -
<agent-extra-socket_on_local>: SSH 接続元で
gpgconf --list-dir agent-extra-socket
を実行して得られた値 -
こんな感じ
Host host.example.com RemoteForward <agent-socket_on_remote> <agent-extra-socket_on_local>
-
-
リモート(SSH 接続先)の
/etc/ssh/sshd_config
にStreamLocalBindUnlink yes
を追記する -
リモート(SSH 接続先)の systemd で gpg が起動しないようにする
-
設定ファイルに自動起動を無効化する設定を追記
$ cat ~/.gnupg/gpg.conf no-autostart
-
systemd による自動起動を無効化
systemctl --user mask gpg-agent.service gpg-agent.socket gpg-agent-ssh.socket gpg-agent-extra.socket gpg-agent-browser.socket
-
SSH 接続先で agent-extra-socket にリンクを張る
リモート(SSH 接続先)で以下のコマンドを実行する。
ln -sf $(gpgconf --list-dir agent-socket) $(gpgconf --list-dir agent-extra-socket)
課題(自分の環境だけ?)
ローカルで Open Devcontainer を使った際、起動したコンテナ上で GPG を使えていない。
リモートで使用する設定を行なう前は使えていた気がする(記憶が朧げ)が、原因を特定できていない。