LoginSignup
13

More than 5 years have passed since last update.

DockerfileでSSH鍵認証ができるイメージを作る

Last updated at Posted at 2016-04-26

下記のDockerfileでイメージを作ると、コンテナを作る時にSSH公開鍵を変数として渡すことができます。

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server openssh-client && \
    apt-get clean && mkdir /var/run/sshd

RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh && \
    echo "echo \$AUTHORIZED_KEYS > /root/.ssh/authorized_keys" > /run.sh && \
    echo "chmod 600 /root/.ssh/authorized_keys" >> /run.sh && \
    echo "/usr/sbin/sshd -D" >> /run.sh

EXPOSE 22
CMD ["/bin/bash", "/run.sh"]

まずはこのDockerfileで、例えばubuntu1604sshという名前のイメージをビルドします:

$ docker build -t ubuntu1604ssh .

このイメージに対して-e AUTHORIZED_KEYS="$(cat ~/.ssh/id_rsa.pub)"というオプションをつけて公開鍵を指定すると、SSH鍵認証が可能になります。コマンドは下記のようになります:

$ docker run -p 2233:22 --name=cn01 -e AUTHORIZED_KEYS="$(cat ~/.ssh/id_rsa.pub)" -dt ubuntu1604ssh

sshのコマンドはこんな感じです:

$ ssh -p 2233 -l root localhost

何度か繰り返す際にStrictHostKeyCheckingでエラーになってしまう場合は、下記のようにStrictHostKeyCheckingを無効にするという手もあります。(* セキュリティー・リスクがありますので自己責任で。)

$ ssh -o StrictHostKeyChecking=no -o LogLevel=FATAL -p 2233 -l root localhost

Dockerfile内で重要なのは下記の部分です。この部分を理解してしまえばどのディストリビューションにも適用できます。

RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh && \
    echo "echo \$AUTHORIZED_KEYS > /root/.ssh/authorized_keys" > /run.sh && \
    echo "chmod 600 /root/.ssh/authorized_keys" >> /run.sh && \
    echo "/usr/sbin/sshd -D" >> /run.sh

一応、主要なディストリビューションは一通り作ってしまったので他のディストリビューションでこの方法を試したい方は下記のレポジトリを覗いてみてください。

参考になったリンク

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13