🖥

docker 「コンテナを ssh 接続できるようにするDockerfile」チュートリアル解説

2023/08/26に公開

dockerチュートリアルに、コンテナに直接ssh接続する例が書かれている。

Dockerize an SSH service | Docker Documentation

概要

特別なことは何もしていない。
docker的な解決ではなく、単にサーバー的解決をおこなう。

要するにサーバを立ててから、ssh接続できるようにするまでの手順をDockerfileに書いておけば良い。

Dockefile

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/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

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

Dockerfileの解説

sshサーバーをインストールする

RUN apt-get update && apt-get install -y openssh-server

サーバーなしにはssh接続はできぬ。

ssh用のディレクトリ作成

このディレクトリがないとsshdが動かないっぽい。

RUN mkdir /var/run/sshd

rootユーザーにパスワードを設定する

chpasswd コマンドでパスワード設定をする。Linuxの基本コマンドである。
この例では root ユーザーに screencast というパスワードを設定している。

RUN echo 'root:screencast' | chpasswd

rootでのパスワードログインを許可する

sshd_config ファイルを強引に書き換えての設定変更。

RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

OpenSSHのバージョンにもよるが、デフォルト設定では通常、 root に直接パスワードでログインすること禁止されている。

「OpenSSH 7.0」がリリース、PermitRootLogin設定の変更などセキュリティ強化が行われる | OSDN Magazine

何かのおまじない

正規表現のせいで読みづらいが /etc/pam.d/sshd の設定を書き換えている。
コメントにある通り、これを書かないとログイン後にキックされてしまうらしい。

# 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
- session  required  pam_loginuid.so
+ session  optional  pam_loginuid.so

(だが試しにこの行を消してみたところ、特に問題なくsshログインできた)

ubuntu - Why is it needed to set pam_loginuid to its optional value with docker? - Stack Overflow

環境変数を渡す例

チュートリアルにはあくまで例を書いているだけで、特に意味のあることはしていないような。(この二行を消しても動く)

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

22番ポートを晒す

EXPOSE 22

sshサーバーを起動する

起動せずにはsshは使えぬ。

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

参考

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2018-06-18

Discussion