macOS ホストとコンテナで ssh-agent を共有する
Docker Desktop for Mac の話。コンテナにインストールした Ansible を実行する際に SSH 鍵の扱いを簡略化するために、ホストである macOS 上で実行している ssh-agent を共有できないかと考えた。
SSH_AUTH_SOCK
環境変数を共有して、その先のパスにあるソケットをコンテナにマウントしてしまえばいけるのでは?と思って試したもののダメ。これは macOS では UNIX ドメインソケットをコンテナにマウントして共有できない仕様による制約のようだ。
しかし ssh-agent を共有したい要望は多いらしく、ssh-agent の共有に関する Issue によると、専用のパスである /run/host-services/ssh-auth.sock
を使用すれば ssh-agent の共有が可能になっているとのこと。実際に以下のように専用のパスをマウントしつつコンテナを実行してみたところ ホストの ssh-agent を共有できた。
$ docker run -it \
-v /run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock \
-e SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock \
ubuntu:20.04
コンテナの中から SSH 接続したいケースは少ないような気もするが、Ansible などを使う場合は便利かもしれない。