SSHログイン可能なCentOS7コンテナを作成する

ブリッジ接続でホストのネットワークに直接接続したDockerコンテナ環境を構築し、便利になったものの、やはりコンテナ環境は従来の仮想サーバ環境とは少々異なり癖があるもの。

本来あるべき使い方とは違うかとは思いますが、やはりSSHでログインできるようになった方が便利なのでSSHログイン可能なコンテナを作成してみます。
(ほとんど個人用の備忘録として記載します)

鍵の作成

ホストサーバからコンテナへのみ、鍵認証(パスフレーズなし)によるログインが可能なようにしたいと思います。SSH公開鍵認証用の鍵をホストサーバにて作成しておきます。

# ssh-keygen -t rsa

公開鍵(~/.ssh/id_rsa.pub)を作業用ディレクトリにコピーしておきます。

Dockerfileによるイメージのビルド

以下のようなDockerfile(./sshdenable)を準備します。

FROM            centos:latest
MAINTAINER      Tomotaka Kizawa

# Install
RUN     yum install -y openssh-server && yum clean all
RUN     yum update -y && yum clean all
RUN     systemctl enable sshd

# Setup sshd
ADD     id_rsa.pub /root/.ssh/authorized_keys
RUN     sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN     sed -ri 's/^#RSAAuthentication yes/RSAAuthentication yes/' /etc/ssh/sshd_config
RUN     sed -ri 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

上記の公開鍵をDockerfileと同じディレクトリに設置し、以下のようにコンテナのビルドを実行します。

# docker build -f ./sshdenable -t centos:sshdenable  --no-cache=true .
Sending build context to Docker daemon 437.6 MB
Step 1 : FROM centos:latest
 ---> 0584b3d2cf6d

~中略~

Successfully built 8b726ab1c9f3

解説

読んだ通りではありますが、以下のカスタマイズを行っています。

  • openssh-serverパッケージをインストール&有効化
  • 最新のパッケージに更新
  • 公開鍵をコピー(埋め込み)
  • 鍵認証を有効化し、パスワード認証を無効化
少し古い情報ではコンテナ内でsystemd管理によるデーモン管理を行う際にはfakesystemdへの入れ替えが必要との記載がありますが、現在では不要となっています。

作成したイメージからの起動

イメージを作成したので、次からは以下のように起動するだけで利用できる。

# docker run --privileged -d --name container3 --hostname container3 \
--net shared_nw --ip 192.168.X.XXX --restart=always centos:sshdenable /sbin/init

CentOS7のsystemd管理で各種デーモンの起動ができるよう、–privilegedオプションを付加しバックグラウンドで起動させている。

–privilegedオプションを付加した場合、コンテナは管理者モードで起動され各種ハードウェアリソースにアクセス可能になる。マルチテナントで利用する際には注意が必要である。
なお以下のページにはSELinux無効の場合には–privilegedオプションの代わりに–cap-add=SYS_ADMINに変えても動作すると記載があり確認中です。
# はじめに CentOS 7ではinitデーモンがsystemdに変わったため、centos:centos7のDockerイメージを使用した場合、普通にコンテナを作ってその中でsystemctlを実行すると「Failed to g...