主にDockerizing an SSH Daemon Serviceとdocker上のコンテナをansibleで構成管理するを参考にさせていただきましたが、意外と面倒くさかったです。
準備
sshの公開鍵をコピーしてauthorized_keysという名前でDockerfileと同じところに置いておく。
# sshd ubuntu 14.04
#
# VERSION 0.0.1
FROM ubuntu:14.04
MAINTAINER h.obata "obata.hiroshi@propos.jp"
# make sure the package repository is up to date
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN useradd docker -m
RUN echo 'docker:docker1234' | chpasswd
RUN echo 'docker ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/docker
# Set up SSH
RUN mkdir -p /home/docker/.ssh; chown docker /home/docker/.ssh; chmod 700 /home/docker/.ssh
ADD authorized_keys /home/docker/.ssh/authorized_keys
RUN chown docker /home/docker/.ssh/authorized_keys
RUN chmod 600 /home/docker/.ssh/authorized_keys
RUN sed -ri 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
ポイント
RUN echo 'docker ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/docker
でパスワードなしでsudoが実行できるようにする。これが嫌ならInventoryファイルにansible_sudo_passでパスワードを記述するか、ansible実行時に'--ask-sudo-pass'オプションを使う。これをやらないとroot権限が必要なコマンドが動きません。世の中のAnsible入門HogeHogeにはこのあたりのことがちゃんと書いていないものが多いです。
sshd_configの記述形式および初期の設定内容はディストリビューション毎にばらばらなので、sedで書き換えるスクリプトを記述する際には使おうとするディストリビューションの内容を確認した方がよいです。
以上