SummerWind

Web, Photography, Space Development

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 などを使う場合は便利かもしれない。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。