#はじめに
いくつかのディストリビューションにおいて 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 でマルチユーザーが便利になりましたとさ。