構図
Capistrano Server[Docker] <=> Local[Mac] <=> SSHD Server[Docker]
接続先(ファイル設置先) サーバ
設定ファイル
version: "3"
services:
ssh:
build:
dockerfile: Dockerfile
command: ["/usr/sbin/sshd", "-D"]
tty: true
ports:
- "10022:22"
Docker 初心者 — ssh で接続できるサーバーを立てる - Qiita
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y \
openssh-server \
sudo
RUN mkdir /var/run/sshd
RUN echo 'root:admin' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
# add user
RUN groupadd -g 1000 app && \
useradd -g app -G sudo -m -s /bin/bash app && \
echo 'app:pass' | chpasswd
RUN echo 'Defaults visiblepw' >> /etc/sudoers
RUN echo 'app ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
パスワードは、rootは `admin` 、appは `pass` です。
起動
確認
$ ssh app@localhost -p 10022
app@localhost's password: $<= input password
capistrano(in Docker)
ゲートウェイの確認
コンテナIDを確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21efaa7faf20 hoge "/usr/sbin/sshd -D" 33 minutes ago Up 33 minutes 0.0.0.0:10022->22/tcp hoge_1
コンテナIDよりGatewayを確認
$ docker inspect 21efaa7faf20
[
{
"Id": "b28f7fa806b13afb411f1a69baf76d6d122184f1542c79074d3320414ad36596",
...
"NetworkSettings": {
...
"Networks": {
"hoge-service": {
...
"NetworkID": "0cd7d56e94c9134807488f8e0ba82d22eaa49e110b14eb695ed326c02aa7e1b9",
"EndpointID": "c46ea719d379e278dadf3a5210ec4239a12aca0ef4aff1cefd3c8478336178d5",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.4",
...
}
}
}
}
]
capistranoの設定
# -------------------
# Server
# -------------------
set :user, 'app'
server "172.18.0.1",
port: 10022,
roles: %w[hoge],
primary: true
set :ssh_options, {
auth_methods: %w(password),
password: 'pass',
forward_agent: false,
}
実行
$ bundle exec cap development --trace
tips
- capistranoからの接続ができないと思っていたら、capistranoの接続先をlocalhostにしていた。
- key認証の Dockerfile も見つけたが、上手く接続できない。