はじめに
実務で依存関係の調査があり、
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
コマンドを使用して、
vim
とopenssh-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
コマンド使用してファイル転送などが行える。
実務で以外に使用回数が多かったので今回記事の作成を行った。