Dockerコンテナ内でSSHキーを使用する 質問する

Dockerコンテナ内でSSHキーを使用する 質問する

Git を使ってさまざまな楽しいことを実行するアプリ (git clone や git push の実行など) があり、それを docker 化しようとしています。

しかし、コンテナの「ユーザー」が使用できるようにコンテナに SSH キーを追加する必要があるという問題が発生しています。

にコピーし/root/.ssh/、 を変更し$HOME、git ssh ラッパーを作成してみましたが、まだうまくいきませんでした。

参考までに、Dockerfile を以下に示します。

#DOCKER-VERSION 0.3.4                                                           

from  ubuntu:12.04                                                              

RUN  apt-get update                                                             
RUN  apt-get install python-software-properties python g++ make git-core openssh-server -y
RUN  add-apt-repository ppa:chris-lea/node.js                                   
RUN  echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list
RUN  apt-get update                                                             
RUN  apt-get install nodejs -y                                                  

ADD . /src                                                                       
ADD ../../home/ubuntu/.ssh/id_rsa /root/.ssh/id_rsa                             
RUN   cd /src; npm install                                                      

EXPOSE  808:808                                                                 

CMD   [ "node", "/src/app.js"]

app.js次のようなgitコマンドを実行しますgit pull

ベストアンサー1

ビルド時に SSH を使用する必要がある場合は、さらに難しい問題になります。たとえば、 を使用している場合git cloneや、私の場合はpipと を使用npmしてプライベート リポジトリからダウンロードする場合です。

私が見つけた解決策は、フラグを使用してキーを追加することです--build-arg。その後、新しい実験的な--squashコマンド (1.13 で追加) を使用してレイヤーをマージし、削除後にキーが使用できなくなるようにします。これが私の解決策です:

ビルドコマンド

$ docker build -t example --build-arg ssh_prv_key="$(cat ~/.ssh/id_rsa)" --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa.pub)" --squash .

Dockerファイル

FROM python:3.6-slim

ARG ssh_prv_key
ARG ssh_pub_key

RUN apt-get update && \
    apt-get install -y \
        git \
        openssh-server \
        libmysqlclient-dev

# Authorize SSH Host
RUN mkdir -p /root/.ssh && \
    chmod 0700 /root/.ssh
# See: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints
COPY known_hosts > /root/.ssh/known_hosts

# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \
    echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \
    chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa.pub

# Avoid cache purge by adding requirements first
ADD ./requirements.txt /app/requirements.txt

WORKDIR /app/

RUN pip install -r requirements.txt

# Remove SSH keys
RUN rm -rf /root/.ssh/

# Add the rest of the files
ADD . .

CMD python manage.py runserver

更新: Docker 1.13 を使用しており、実験的な機能が有効になっている場合は、--squashビルド コマンドに を追加してレイヤーをマージし、SSH キーを削除して から非表示にすることができますdocker history

おすすめ記事