SSHサーバーを立てるDockerfile(ubuntu:18.04)
モチベーション
一般にDockerコンテナ内にSSHサーバー立てるべきでないと言われるが公式でもドキュメントがあるように(「Dockerize an SSH service | Docker Documentation」)欲しくなる時がたまにある。
上記の公式はubuntu:16.04を使っていて、「docker 「コンテナを ssh 接続できるようにするDockerfile」チュートリアル解説 - Qiita」こちらのQiitaも同様にubuntu:16.04を使っていて、ubuntu:18.04だとPermitRootLoginのsedの書き換え処理が対応できてなかったので、ubuntu:18.04用に書き直したもの。
Dockerfile
code:Dockerfile
FROM ubuntu:18.04
RUN apt update
RUN apt install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
ENTRYPOINT "/usr/sbin/sshd", "-D"
想定している使い方
以下でSSHサーバーを起動する。
code:bash
docker run -it -p 2022:22 --init mysshserver
以下でログイン。ログインパスワードは"root"。
code:bash
ssh -p 2022 root@localhost
おまけ: docker-buildをDockerfileなしで行う
以下のコマンドを使えばDockerfileなしでイメージが作成できる。
code:bash
docker build -t mysshserver - <<'EOS'
FROM ubuntu:18.04
RUN apt update
RUN apt install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
ENTRYPOINT "/usr/sbin/sshd", "-D"
EOS
「Dockerfileを入力すると「Dockerfileなしで標準入力からdocker buildしてくれるシェル」を吐くNipp」で生成した。
関連: DockerでパスワードなしでログインできるSSHサーバー(公開鍵もなし)