🔑
Dockerコンテナにssh接続する
はじめに
SSH接続の手順を理解するためにSSH接続可能なDockerコンテナを作成しました。
手順
コンテナの準備
dockerfile
FROM centos:centos7
RUN yum -y update \
&& yum install -y openssh-server \
openssh-clients \
&& yum clean all
# パスワードを使用したログインを許可しない
# ポートを22から20022に変更
# rootのパスワードをpasswordに設定
RUN sed -ri 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config \
&& sed -ri 's/^#Port 22/Port 20022/' /etc/ssh/sshd_config \
&& echo 'root:password' | chpasswd
EXPOSE 20022
docker-compose.yml
version: "3"
services:
server:
build:
context: .
dockerfile: Dockerfile
container_name: server
privileged: true
command: /sbin/init
ports:
- 20022:20022
公開鍵の作成
今回は特に指定なしでデフォルトのrsaタイプのキーを使用します。
$ ssh-keygen
適当に名前を付けて(今回はdocker_ssh_rsa
)保存します。
docker_ssh_rsa.pub
という公開鍵が作成されたことを確認します。
公開鍵の登録
コンテナを起動させた上で、次のコマンドを実行してコンテナに公開鍵をコピーします。
$ docker-compose up -d
$ docker compose cp <公開鍵のパス> server:/root
# 例
$ docker compose cp ~/.ssh/docker_ssh_rsa.pub server:/root
次に、コンテナに入った上で公開鍵を登録します。
$ docker-compose exec server /bin/bash
# コンテナ内で実行
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cat ~/docker_ssh_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
以上によりコンテナに公開鍵を登録することができました。
接続してみる
ホストから次のコマンドを実行して接続してみます。
$ ssh -i ~/.ssh/docker_ssh_rsa -p 20022 root@localhost
あるいは、~/.ssh/config
に以下のような設定をしている場合
~/.ssh/config
Host docker-ssh
HostName localhost
User root
IdentityFile ~/.ssh/docker_ssh_rsa
Port 20022
ssh docker-ssh
で接続することも可能です。
コード
使用したdockerファイルなどのコードは以下のリポジトリから見ることができます。
Discussion