📚

DockerコンテナからMacのSSHエージェントを利用する

2024/02/17に公開

Mac上のソケットを $SSH_AUTH_SOCK 通じてコンテナに渡しても動かない。(以前は動いていたような気がするが動かなくなったので調べた)

結論を言うと

/run/host-services/ssh-auth.sock

を使えば良い

デフォルトのSSHエージェントを使う

compose.yaml
version: '3'

services:
  server:
    build:
      context: ./
      dockerfile: ./docker/server/Dockerfile
    command: sleep infinity
    volumes:
      - /run/host-services/ssh-auth.sock:/tmp/agent.sock
    environment:
      - SSH_AUTH_SOCK=/tmp/agent.sock
docker/server/Dockerfile
FROM debian:stable-slim

RUN apt-get update
RUN apt-get install -y --no-install-recommends openssh-client
RUN mkdir -p -m 0700 /root/.ssh && ssh-keyscan github.com >> /root/.ssh/known_hosts

コンテナ上では /tmp/agent.sock 経由で参照できる

# mount | grep sock
tmpfs on /tmp/agent.sock type tmpfs (rw,relatime,size=1636068k,mode=755)

コンテナ内でrootユーザー以外を使っているとソケットファイルの権限も修正する必要があるかもしれない

1PasswordのSSHエージェントを使う

https://developer.1password.com/docs/ssh/agent/compatibility/#configure-ssh_auth_sock-globally-for-every-client

上記の記事の Configure SSH_AUTH_SOCK globally for every client を事前にやっておけば デフォルトのSSHエージェントを使う と同じ compose.yaml で動くようになる

この設定を入れておかないとDocker起動時に1Passwordではない方のSSHエージェントを参照してしまう

Discussion