LoginSignup
0
2

More than 5 years have passed since last update.

Docker コンテナでの sshd 起動まとめ w/o init

Last updated at Posted at 2018-04-16

はじめに

いくつかのディストリビューションにおいて sshd を起動するミニマムと思しき手順をまとめます。
今回想定しているのは init を使わないで直接 sshd を起動するケースです。

対象ディストリビューション:

  • CentOS 6
  • CentOS 7
  • Ubuntu 16.04 LTS (Xenial Xerus)
  • Ubuntu 18.04 LTS (Bionic Beaver)

ポイント

ポイントは鍵の作成です。

具体的な手順

CentOS 6

sshd インストール

# yum install -y openssh-server

sshd 起動

CentOS 6 では鍵ファイルは起動スクリプトが必要に応じて作成してくれます。

# service sshd start

CentOS 7

sshd インストール

# yum install -y openssh-server

sshd 準備

CentOS 7 では鍵ファイルは起動スクリプトとは別のスクリプトが作成しています。systemd の Unit ファイルも別に存在し、sshd.service に依存関係が設定されています。
ExecStartPre ではないところがミソ。

# /usr/sbin/sshd-keygen

sshd 起動

CentOS 7 では鍵ファイルが存在しないと sshd が起動しません。

# /usr/sbin/sshd

Xenial Xerus

sshd インストール

# apt -y install openssh-server

sshd 準備

Xenial では .deb パッケージの postinst スクリプトが鍵ファイルを作成しています。opsenssh-server をインストールしたイメージを使いまわすと鍵が共通になります。
再作成するには下記を実行します。
※イメージ作成段階で消しておくのが安全かと思います。

# rm /etc/ssh/ssh_host_*key*
# dpkg-reconfigure openssh-server

sshd 起動

Xenial では鍵ファイルが存在しなくても sshd は起動に失敗しませんが、その状態では ssh クライアントの接続は失敗します。

# /etc/init.d/ssh start

Bionic Beaver

Bionic は Xenial と同じです。

systemd について

systemd を使うのであれば下記で普通に systemctl が使えると思います。

$ docker run --privileged <image_name> /sbin/init

ただし、sshd が systemd で管理されているディストリビューションは、今回対象とした中では CentOS 7 のみです。(Ubuntu にも systemd の unit file が存在しますが、systemd が動いていなくても ssh daemon を制御できます。)
「システムコンテナとして利用するのに init は必須ではない」、とも言えます。

まとめ

Docker コンテナをマルチプロセス・マルチユーザーで利用するのは不適切かもしれませんが、かといって、マルチプロセスやマルチユーザーが必要なケースで別の仮想化を使うというのも、面倒じゃないでしょうか。

ということで、ssh でマルチユーザーが便利になりましたとさ。

0
2
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
0
2