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

# 開発環境
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)](http://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)
[CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する](http://qiita.com/yunano/items/9637ee21a71eba197345)
[MacにDocker - Docker Compose](http://qiita.com/sakasa/items/3fe93c68230fecc4ad71)
[SSHのポート番号を変更 - SSHサーバーの設定](https://webkaru.net/linux/change-ssh-port/)