LoginSignup
27
27

More than 5 years have passed since last update.

Dockerのコンテナ間でssh接続させる

Last updated at Posted at 2017-08-23

開発環境

macOS Sierra
docker for mac Version 17.06.1-ce-mac24 (18950)

完成目標

slaveコンテナからmasterコンテナにssh接続でログインする

Dockerfileの準備

FROM centos:7

# yum update
RUN yum -y update && yum clean all

# ssh install
RUN yum -y install openssh-server openssh-client && \
    mkdir  ~/.ssh && \
    touch  ~/.ssh/authorized_keys && \
    chmod 600  ~/.ssh/authorized_keys

イメージの作成

Dockerfileを置いてあるところでビルドを実行

$ docker build -t hello_centos:latest .

コンテナの作成(master)

$ docker run --privileged -d -it --name master -p 8080:80 -p 2222:22 hello_centos /sbin/init

コンテナの作成(slave)

$ docker run --privileged -d -it --name slave -p 8090:80 -p 2223:22 --link master:mas hello_centos /sbin/init
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                        NAMES
94f5c8b21eb0        hello_centos        "/sbin/init"        7 seconds ago       Up 6 seconds        0.0.0.0:2223->22/tcp, 0.0.0.0:8090->80/tcp   slave
8d23ba5bd5d1        hello_centos        "/sbin/init"        23 seconds ago      Up 21 seconds       0.0.0.0:2222->22/tcp, 0.0.0.0:8080->80/tcp   master

$ docker inspect [コンテナ名] でコンテナの情報を取得できる

$ docker inspect slave
$ docker exec -it slave bash
[root@94f5c8b21eb0 /]# set | grep MAS
MAS_ENV_no_proxy='*.local, 169.254/16'
MAS_NAME=/slave/mas
MAS_PORT=tcp://172.17.0.2:22
MAS_PORT_22_TCP=tcp://172.17.0.2:22
MAS_PORT_22_TCP_ADDR=172.17.0.2
MAS_PORT_22_TCP_PORT=22
MAS_PORT_22_TCP_PROTO=tcp
MAS_PORT_80_TCP=tcp://172.17.0.2:80
MAS_PORT_80_TCP_ADDR=172.17.0.2
MAS_PORT_80_TCP_PORT=80
MAS_PORT_80_TCP_PROTO=tcp
$ ping mas
PING mas (172.17.0.2) 56(84) bytes of data.
64 bytes from mas (172.17.0.2): icmp_seq=1 ttl=64 time=0.205 ms
64 bytes from mas (172.17.0.2): icmp_seq=2 ttl=64 time=0.154 ms

ssh-keygenで鍵作成を作成する

[root@94f5c8b21eb0 ~]# cd ~/.ssh
[root@94f5c8b21eb0 .ssh]# ssh-keygen -t rsa

configの設定

[root@94f5c8b21eb0 .ssh]# vi ~/.ssh/config

Host master
  HostName 172.17.0.2
  User root
  Port 2222
  IdentityFile ~/.ssh/id_rsa

slaveコンテナの準備完了

masterコンテナに公開鍵を設定
slaveコンテナで作成した公開鍵(id_rsa.pubの中をコピーしておく)をmasterコンテナのauthorized_keysファイルに貼り付ける

$ docker exec -it master bash
[root@8d23ba5bd5d1]# vi ~/.ssh/authorized_keys

slaveコンテナで作成した公開鍵(id_rsa.pub)の中をコピーして貼り付ける

slaveコンテナからsshログインしてみる

[root@94f5c8b21eb0]# ssh master
ssh: connect to host 172.17.0.2 port 2222: Connection refused

ログインできない
masterコンテナのssh専用のportが22(デフォルト)になっているので2222に変更してあげる

masterコンテナのsshd_configのport番号を指定

[root@8d23ba5bd5d1]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
[root@8d23ba5bd5d1]# vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 2222 ← ここ
sshd -t

エラーが出なければOK

sshdの再起動

systemctl restart sshd.service

これでsshの設定が終わりです。再度、slaveコンテナからmasterコンテナにsshログインできるか試してみましょう

[root@94f5c8b21eb0]# ssh master
The authenticity of host '[172.17.0.2]:2222 ([172.17.0.2]:2222)' can't be established.
ECDSA key fingerprint is 5c:8c:f9:29:cd:5f:0a:1f:08:ab:c6:db:b1:c0:47:0e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[172.17.0.2]:2222' (ECDSA) to the list of known hosts.
[root@8d23ba5bd5d1 ~]# 

できました。

参考

DockerをMacにインストールする (更新:2017/5/26)
CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する
MacにDocker - Docker Compose
SSHのポート番号を変更 - SSHサーバーの設定

27
27
1

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
27
27