LoginSignup
3
1

More than 1 year has passed since last update.

Dockerコンテナ間でSSH通信を行う

Posted at

はじめに

実務で依存関係の調査があり、
server_1 から server_2 にSSH通信し、シェルスクリプトを起動する確認を行った。
手っ取り早く環境を用意するためにDokerコンテナ間でSSH通信を試みたが、少し手間取ってしまったため、備忘のため記事を作成した。

環境

Windows10, macOS

対象

Docker初心者、サーバ間通信がわからない人

手順

1. Dockerイメージ作成

任意のディレクトリ作成し、移動

bash or powershell
$ mkdir docker_ssh_communication
$ cd docker_ssh_communication

vimでDockerfile作成。下記のDockerコマンドをコピペする。

bash or powershell
$ vim Dockerfile

FROM ubuntu:20.04

RUN \
    apt update && apt-get install -y \
    vim \
    openssh-server openssh-client \
    && mkdir ~/.ssh \
    && touch ~/.ssh/authorized_keys \
    && chmod 600 ~/.ssh/authorized_keys \
    && apt clean \
    && rm -rf /var/lib/apt/lists/*

CMD ["/sbin/init"]
  • コマンドの説明
    • FROM ubuntu:20.04のOSベースにDockerイメージを構築
    • apt update && apt-get install -yコマンドを使用して、
      vimopenssh-server``openssh-clientをインストール
    • mkdir ~/.ssh``touch ~/.ssh/authorized_keys``chmod 600 ~/.ssh/authorized_keysはSSH認証するための前準備
    • apt clean``rm -rf /var/lib/apt/lists/*は不要なファイル削除
    • CMD ["/sbin/init"]デーモンプロセス初期化

2. コンテナ起動

ターミナルを2つ立ち上げ、それぞれコマンドを実行する。

server_1
$ docker run --privileged -d -it --rm --name server_1 -p 18080:80 -p 2222:22 server_1
server_2
$ docker run --privileged -d -it --rm --name server_2 -p 18090:80 -p 2223:22 --link server_1:server_1 server_2

3. コンテナ内シェル起動

server_1
$ docker exec -u 0 -it server_1 bash
※ windowsの場合、winpty docker exec -u 0 -it server_1 bash
server_2
$ docker exec -u 0 -it server_2 bash
※ windowsの場合、winpty docker exec -u 0 -it server_2 bash

4. sshディレクトリに移動する

server_1 / server_2
cd ~/.ssh

5. server_1の方で秘密鍵&公開鍵作成、登録

server_1
$ ssh-keygen

Enterを押し続ける(空入力でOK)

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:j1vNi+kIkT7iMDA9IYlYagDAD3S+WgCUoEJxEX+Z3aQ root@fcfa22e352cb
The key's randomart image is:
+---[RSA 3072]----+
|&=+=o      .     |
|BB+ .   + +      |
|Oo+. . + E .     |
|oo.o. ..         |
|o oo  o S        |
| oo. . . o o     |
| .o . + . o o    |
|   + . o + o .   |
|    .   o.+ .    |
+----[SHA256]-----+

公開鍵の内容を確認し、コピーしておく

server_1
$ vim id_rsa.pub

server_2(authorized_keys)でserver_1の公開鍵(id_rsa.pub)を登録する(ペースト)

server_2
$ vim authorized_keys

6. server_1からserver_2にSSH通信するためにポートを解放する

server_2
$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org → 元ファイルは残しておく
$ vim /etc/ssh/sshd_config

Port番号のコメントをけして、2222に設定する

#Port 22 → Port 2222

7. サービス再起動

sshd設定を再読み込み、sshdを再起動する

server_2
$ sshd -t
$ systemctl restart sshd.service

server_2のIPアドレスを確認する

server_2
$ hostname -i
172.17.0.3

8. SSH接続

serve_1からSSHコマンドで接続できるか確認する

server_2
ssh -p 2222 root@172.17.0.3

下記が返ってきた場合は、yesを入力

The authenticity of host '[172.17.0.3]:2222 ([172.17.0.3]:2222)' can't be established.
ECDSA key fingerprint is SHA256:a39angxaghzFYEoxh+00UOiSJOYF0tNdR1vQtvuMCtQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

ログイン確認

Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.10.124-linuxkit aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
Last login: Fri Mar 31 05:13:52 2023 from 172.17.0.2
root@34653c25d172:~# 

まとめ

これによりscpコマンド使用してファイル転送などが行える。
実務で以外に使用回数が多かったので今回記事の作成を行った。

3
1
0

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
3
1