🔑

Dockerコンテナにssh接続する

2022/10/10に公開

はじめに

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ファイルなどのコードは以下のリポジトリから見ることができます。

参考

GitHubで編集を提案

Discussion