使い捨てのテスト用のコンテナを作るため、パスワードも公開鍵もなしに ssh できる Docker イメージを作ってみた。
用意するファイル
Dockerfile
FROM ubuntu
RUN apt-get update \
&& apt-get install -y openssh-server \
&& rm -rf /var/lib/apt/lists/*
# empty root password
RUN passwd -d root
# allow root to ssh without password
COPY sshd_config /etc/ssh/sshd_config
sshd_config
PermitEmptyPasswords yes
PasswordAuthentication yes
UsePAM no
イメージ作成
$ ls
Dockerfile sshd_config
$ docker build . -t ubuntu_sshd
コンテナ上の sshd 起動
$ docker run -it ubuntu_sshd
# service ssh start
# ifconfig eth0
=> IP アドレスを取得(例:173.17.0.2)
コンテナに ssh 接続
$ ssh -l root 173.17.0.2
感想
Dockerfile
Docker 初心者なので、こういう使い方でよいのかよくわからない。
本当は、CMD とか使って、docker run した瞬間に sshd が立ち上がるのがかっこいい気がするが、どうやってデーモン化して永続的にコンテナーで走らせられるのかよくわからない。
たぶん
CMD ["service", "ssh", "start"]
で行けそう。でも、同時に IP アドレスも表示するのは、どうしたらいいのだろうか?
sshd_config
デフォルトのファイルはいろいろいっぱい書いてあるが、ほとんどはデフォルト値が書かれているだけっぽく、上のようにたった数行書くだけでも sshd が立ち上がるのは興味深い。
参考
追記
「Docker イメージで sshd」というと、いまや良くないイメージがあるが、まえがきで書いたとおり、これは技術テスト用のイメージであって、実運用を念頭においたものではないことを断っておく。
たしかに実運用ではいまどき ssh は極力使わないほうがいいだろう。ただ、どんな状況でも絶対にダメというわけではなく、技術テストなどの適切な場面があれば使ってもよいだろう。TPO に合わせて使い分けていけばいいだけのことだ、というのが私の意見だ。