ansiblerへの道 - sshログインできるDocker コンテナを立てる -

ansiblerになりたい、、!!
ansibleというよりdockerの記事です。ご容赦ください。

きっかけ

巷にあふれているansibleに関する文献は、大抵Vagrantを使って仮想マシンを立てている。
しかし、Vagrantはとっても重い。
マシンの作成にも、起動にもとっても時間がかかる。

そんな時こそdockerだ。dockerを使うのだ。
と思ったがそういえばdockerってssh接続できるのだろうか。。

こういった思い立ちから、sshdが動作するDockerコンテナを作成することになるのでした。

Dockerコンテナにsshできるようにすることについては賛否両論あるが、 今回はansibleのテスト用にコンテナを作成するのみなので、問題ナッシング。

Dockefileの用意

rootユーザーでのsshdコンテナに関しては公式(以下)に書いてあったので参考にどうぞ。 Dockerize an SSH service | Docker Documentation

今回はrootユーザー以外で行いたかったのである程度変更を加えています。
Dockerfileは以下のようになっています。
sshdを起動してstart.shを走らせるだけのシンプル構成。

FROM centos:centos7
MAINTAINER The CentOS Project <cloud-ops@centos.org>

RUN yum -y update; yum clean all
RUN yum -y install openssh-server passwd; yum clean all
ADD ./start.sh /start.sh
RUN mkdir /var/run/sshd

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' 

RUN chmod 755 /start.sh
# EXPOSE 22
RUN ./start.sh
ENTRYPOINT ["/usr/sbin/sshd", "-D"]

start.shは以下のようになっています。
このスクリプトでは、userというユーザーを作成し、パスワードをnewpassに設定しています。

#!/bin/bash

__create_user() {
# Create a user to SSH into as.
useradd user
SSH_USERPASS=newpass
echo -e "$SSH_USERPASS\n$SSH_USERPASS" | (passwd --stdin user)
echo ssh user password: $SSH_USERPASS
}

# Call all functions
__create_user

dockerイメージの作成

Dockerfileからdockerイメージを作成します。
-tでタグ名kimoton/ssh:centos7を指定します。
--rmをつけておけばdockerのプロセスが死んだときにイメージも一緒に消えてくれます。

docker build --rm -t kimoton/ssh:centos7 .

dockerコンテナの作成

dockerコンテナを作成し、起動します。
-dオプションを付けることでコンテナをバックグラウンドで実行しています。
-pオプションにより、ポート22番のポートフォワーディングを行います。

docker run -d -p 22 kimoton/ssh:centos7

ssh接続の確認

起動しているdockerプロセスを確認します。

$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
15c9cbab8acb        kimoton/ssh:centos7   "/usr/sbin/sshd -D"      9 minutes ago       Up 9 minutes        0.0.0.0:32777->22/tcp    condescending_pare

port 32777番に転送されていることがわかります。

それでは、ssh接続できることを確認しましょう。

 ssh -p 32777 user@localhost 

#Last login: Fri Aug 24 04:07:55 2018 from gateway
#-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
#/bin/sh: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
#[user@15c9cbab8acb ~]$

無事sshログインできました!うれしい!

参考

ssh以外でもansibleの接続に使えるらしい。。

hiyoko-infratech.hateblo.jp