Docker で SSH 接続可能なコンテナを作成する方法のメモ。コンテナの OS は CentOS です。
packer を使った方法は すでに先に書かれて いましたが、ここでは Dockerfile を使って作る方法を書きます。
ssh-ignorekey エイリアス
コンテナを作り直しても、 known_hosts ファイルによって接続エラーにならないように以下のエイリアスを定義しています
alias ssh-ignorekey='ssh -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no'
空パスワードまたは指定したパスワードで root ログインできるコンテナを作りログインする方法
-
Dockerfile
FROM centos RUN yum -y install initscripts MAKEDEV RUN yum check RUN yum -y update RUN yum -y install openssh-server # 空パスワードの場合は以下をコメントアウト # RUN sed -ri 's/^#PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config RUN sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config RUN /etc/init.d/sshd start # 空パスワードの場合は以下をコメントアウト # RUN passwd -d root # 任意のパスワードの場合は以下をコメントアウト & パスワードを書き換える # RUN echo 'root:root' | chpasswd EXPOSE 22 CMD /sbin/init
-
コンテナイメージ作成
docker build -t ssh-enabled .
-
コンテナ起動
CONTAINER_ID=$(docker run -P -d ssh-enabled) && SSH_PORT=$(docker port $CONTAINER_ID 22 | cut -d: -f2) && SSH_HOST=$(docker port $CONTAINER_ID 22 | cut -d: -f1);
-
SSH ログイン
ssh-ignorekey -p $SSH_PORT root@$SSH_HOST
鍵認証で root ログインできるコンテナを作りログインする方法
-
Dockerfile
FROM centos RUN yum -y install initscripts MAKEDEV RUN yum check RUN yum -y update RUN yum -y install openssh-server RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config RUN sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config RUN /etc/init.d/sshd start RUN sed -ri 's/^(root):[^:]*:(.*)$/\1:*:\2/' /etc/shadow RUN ssh-keygen -f ~root/.ssh/id_rsa -t rsa -b 2048 -N '' RUN cp ~root/.ssh/id_rsa.pub ~root/.ssh/authorized_keys RUN chmod 0600 ~root/.ssh/authorized_keys EXPOSE 22 CMD /sbin/init
-
コンテナイメージ作成
docker build -t ssh-enabled .
-
コンテナ起動
CONTAINER_ID=$(docker run -P -d ssh-enabled) && SSH_PORT=$(docker port $CONTAINER_ID 22 | cut -d: -f2) && SSH_HOST=$(docker port $CONTAINER_ID 22 | cut -d: -f1);
-
鍵コピー
docker cp $CONTAINER_ID:/root/.ssh/id_rsa $CONTAINER_ID
-
SSH ログイン
ssh-ignorekey -i $CONTAINER_ID/id_rsa -p $SSH_PORT root@$SSH_HOST