はじめに
Dockerコンテナ間でパスワード認証でSSHできるようにする設定がわからず、
調査に手間取ったので共有
環境について一通り書いたあとに詰まった個所と対策について記述している
環境
Docker
todotodo@vm:~/Endlessh$ docker --version
Docker version 27.5.1, build 9f9e405
ディレクトリ構成
.
├── attacker_context
│ └── Dockerfile
├── docker-compose.yml
└── pot_context
├── Dockerfile
└── start.sh
docker-compose.yml
version: '3'
networks: #コンテナが所属するネットワークを定義
Endless:
ipam:
driver: default
config:
- subnet: 11.11.11.0/24 #コンテナが所属するサブネット
services:
attacker:
build: attacker_context
tty: true
networks:
Endless: #コンテナが所属するネットワークを指定
ipv4_address: 11.11.11.2 #コンテナのIPアドレスを指定
pot:
build: pot_context
tty: true
expose: #他コンテナからアクセスできるポート。
- "2222"
- "22"
networks:
Endless: #コンテナが所属するネットワークを指定
ipv4_address: 11.11.11.3 #コンテナのIPアドレスを指定
pot_context/Dockerfile
RUN apt-get update && \
apt-get install -y \
build-essential \
cmake \
git \
sudo \
wget \
vim \
openssh-server \
openssh-client \
iputils-ping
COPY ./start.sh /start.sh
RUN chmod +x /start.sh
CMD /start.sh
attacker_context/Dockerfile
FROM ubuntu:latest
RUN apt-get update && \
apt-get install -y \
build-essential \
cmake \
git \
sudo \
wget \
vim \
openssh-server \
openssh-client \
iputils-ping
start.sh
#!/bin/bash
echo "PORT 22" >> /etc/ssh/sshd_config
echo "PORT 2222" >> /etc/ssh/sshd_config
adduser --disabled-password --gecos "" "test"
echo "test:test" | chpasswd
service ssh restart
tail -f /dev/null
コンテナの起動
$ docker compose build
$ docker compose up -d
SSH接続
attackerコンテナに入ってpotコンテナにsshする
$ docker compose exec attacker bash
root@75db6a563d01:/# ssh test@11.11.11.3
test@11.11.11.3's password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-36-generic x86_64)
<snip>
Last login: Sat Feb 15 09:20:22 2025 from 11.11.11.2
test@6b9757d2f085:~$
つまった個所
コンテナ間で通信可能なポートが開いていない
docker-compose.yml
のexpose
でコンテナ間通信に使うポートを設定する
openssh-server, clientがinstallされていない
ubuntu:latest
は最低限の構成となっており、openssh-server
やopenssh-client
は含まれていないので
RUN apt-get install openssh-server openssh-client
でinstallしている
port 22: Connection refused エラーがでてSSHできない
pingを打ってみてポート22での疎通に問題がないことを確認する
root@cbd78eb629f7:/# ping 11.11.11.3 -p 22
PATTERN: 0x22
PING 11.11.11.3 (11.11.11.3) 56(84) bytes of data.
64 bytes from 11.11.11.3: icmp_seq=1 ttl=64 time=0.056 ms
64 bytes from 11.11.11.3: icmp_seq=2 ttl=64 time=0.077 ms
SSHで使用可能なポートを指定するために、/etc/ssh/sshd_config
にPORT 22
を追記する必要がある
その後service ssh restart
でsshを再起動する
echo "PORT 22" >> /etc/ssh/sshd_config
service ssh restart
SSH接続できるようになる
root@75db6a563d01:/# ssh test@11.11.11.3
test@11.11.11.3's password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-36-generic x86_64)
<snip>
Last login: Sat Feb 15 09:20:22 2025 from 11.11.11.2
test@6b9757d2f085:~$
docker-compose up でコンテナは立ち上がるが即座に終了してしまう
Dockerfile
のCMD
でコンテナ起動時に実行したいスクリプトstart.sh
を指定している
その場合、スクリプト実行後にコンテナが終了してしまう
終了させたくない場合はスクリプト末尾に下記を追加する
tail -f /dev/null
tail -f
は指定したファイルに変更があった際に表示する機能だが、監視対象が/dev/null
という虚無なので何も起こらない
つまり、tail
が/dev/null
の変更を監視し続けてコンテナが終了しない
参考資料
https://qiita.com/ken992/items/872a90736e6af26ef4ab
まとめ
コンテナ間でパスワードを使用したSSHができるようになった
自分でやろうとした際につまった個所が複数あったのでまとめてみた
誰かの助けになったらうれしいです