60
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2018-06-18

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オープンチャットもご利用ください。

Twitter

60
57
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?