【環境構築】ssh接続可能なDockerイメージの作成の仕方

はじめに

こんにちは、がんがんです。
今回の記事はこちらの続きとなっています。
gangannikki.hatenadiary.jp


ssh接続が可能となるコンテナがあれば便利だなと思ったので、少し実装をしてみました。
今回の記事では、ssh接続が可能となるDockerイメージの構築に関する備忘録を残しておきます。

Dockerfileの構築:rootユーザの場合

下記のDockerfileは公式ドキュメントとほとんど同じものになっています。

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:test' | chpasswd
RUN sed -i 's/#*PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Dockerfileの構築:一般ユーザの場合

rootユーザだと使いにくいこともあるので、一般ユーザでの作成もまとめておきます。

FROM ubuntu:20.04

ARG USER=ubuntu
    
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN useradd -m -s /bin/bash ${USER} && gpasswd -a ${USER} sudo
RUN echo '${USER}:${PASSWD}' | chpasswd

# SSH login fix. Otherwise user is kicked off after login
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd

WORKDIR /home/${USER}
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

コンテナのBuildおよびRun

$  docker build . -t test .
$  docker run -d -P --name test_sshd test

実際にsshで接続するときは以下の通りです。

$ ssh root@localhost -p $(docker port test_sshd 22|sed 's/.*://')

おわりに

今回の記事ではssh接続可能なDockerイメージの作成に関する備忘録を書きました。
意外と簡単に出来ることを経験することが出来てよかったです。