DockerでSSH keyを使ってbitbucketの非公開レポジトリをクローン


TL;DR

結論からいうと、下記2つコマンドを覚えば話は終わりです。

$ ssh-keyscan -t rsa bitbucket.org >> /root/.ssh/known_hosts
$ ssh-agent bash -c 'ssh-add /PATH/TO/KEY.pem; git clone [email protected]:YOUR_NAME/YOUR_REPO.git'

方法

キーペアの作成&登録

記事たくさんあるので、割愛します。

Dockerfile

あくまでも一例なので、必要に合わせて修正してください。

FROM ubuntu
# おまじない
RUN apt-get update
RUN apt-get install -y openssl git
WORKDIR /usr/src/app

# known_hostsにbitbucket.orgを登録
# 登録しなければ、キーが正しいであっても通らない
# `Permission denied (publickey).`と怒られる
RUN mkdir /root/.ssh/ && touch /root/.ssh/known_hosts
RUN ssh-keyscan -t rsa bitbucket.org >> /root/.ssh/known_hosts
# GitHubの場合は
RUN ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts

# キーをコンテナにコピー
COPY ./*.pem /usr/src/app/git-key.pem
RUN chmod 600 /usr/src/app/git-key.pem

# リポジトリのClone
RUN ssh-agent bash -c 'ssh-add /usr/src/app/git-key.pem; git clone [email protected]:YOUR_NAME/YOUR_REPO.git'

# 使い終わったキーを削除
RUN rm -rf /usr/src/app/git-key.pem

# 一応確認しておく
RUN cd YOUR_REPO && ls -la

余談

ssh-agentコマンドは踏み台サーバーでログインする時も活用出来ます。

参考

https://stackoverflow.com/a/4565746
https://stackoverflow.com/a/23411161
https://stackoverflow.com/a/29380765
https://euske.github.io/openssh-jman/ssh-keyscan.html
https://qiita.com/naoki_mochizuki/items/93ee2643a4c6ab0a20f5