Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

Docker – SSH を使ってコンテナ内に接続する方法

Docker – SSH を使ってコンテナ内に接続する方法

概要

コンテナ上に ssh サーバーを起動し、パスワード認証または公開鍵認証を行う方法について解説します。

Advertisement

パスワードでログインする Docker コンテナ

使い方

ソースは pystyle/docker/ssh_passwd になります。

  1. Dockerfile をダウンロードします
  2. docker-compose up -d でコンテナをビルドし、バッググラウンドで起動します
  3. ssh root@<Docker が起動しているマシンのホスト> -p 2222 でログインします
    • 例: ssh@127.0.0.1 -p 2222
  4. 初回起動時は公開鍵の指紋を登録するかどうか聞かれるので yes と入力します
    ECDSA key fingerprint is SHA256:0ttTa27iNJPpxLHNXIAhRwWKOxuRcbYFw9QLMChFXiU.
    Are you sure you want to continue connecting (yes/no)?
  5. パスワードに root と入力します。

解説

FROM ubuntu:18.04
LABEL maintainer "pystyle"

ENV LC_ALL C.UTF-8

# Install SSH server
RUN apt-get update && \
    apt-get install -y --no-install-recommends openssh-server && \
    rm -rf /var/lib/apt/lists/* && \
    echo "root:root" | chpasswd && \
    sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config

EXPOSE 22
CMD service ssh start && /bin/bash
  1. apt-getopenssh-server をインストールします。
  2. echo "ユーザー名:パスワード" | chpasswd でパスワードを設定します。
  3. sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_configroot ユーザーのログインを許可するように設定を変更します。(デフォルトでは root ユーザーのログインは許可されていない)
  4. service ssh startsshd を起動します。

公開鍵でログインする Docker コンテナ

Advertisement

使い方

ソースは pystyle/docker/ssh_pubkey になります。

  1. Dockerfile をダウンロードします
  2. 鍵が用意できていない場合は ssh-keygen コマンドで秘密鍵と公開鍵を作成します。いくつか聞かれますが、すべてデフォルトで大丈夫です。
  3. ~/.ssh/id_rsa.pub (Windows の場合、C:\Users\<USERNAME>\.ssh\id_rsa) に公開鍵が作成されるので、これを Dockerfile があるディレクトリと同じ場所に起きます。
  4. docker-compose up -d でコンテナをビルドし、バッググラウンドで起動します
  5. ssh root@<Docker が起動しているマシンのホスト> -p 2222 -i <秘密鍵のパス> でログインします
    • 例: ssh root@127.0.0.1 -p 2222 -i ~/.ssh/id_ras
  6. 初回起動時は公開鍵の指紋を登録するかどうか聞かれるので yes と入力します
    ECDSA key fingerprint is SHA256:0ttTa27iNJPpxLHNXIAhRwWKOxuRcbYFw9QLMChFXiU.
    Are you sure you want to continue connecting (yes/no)?

接続時に WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! というエラーが出る場合

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! というエラーが出る場合、以前に同じホストで異なる公開鍵の指紋が ~/.ssh/known_hosts に登録済みであることを意味します。以下のいずれかの方法で対応してください。

  • 方法1: rm ~/.ssh/known_hostsknown_hosts を削除する。
  • 方法2: 接続時に -o StrictHostKeyChecking=no オプションをつける、(例: ssh root@127.0.0.1 -p 2222 -i ~/.ssh/id_ras -o StrictHostKeyChecking=no

解説

FROM ubuntu:18.04
LABEL maintainer "pystyle"

ENV LC_ALL C.UTF-8

# Install SSH server
RUN apt-get update && \
    apt-get install -y --no-install-recommends openssh-server && \
    rm -rf /var/lib/apt/lists/* && \
    echo "root:root" | chpasswd && \
    sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config && \
    sed -i "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/" /etc/ssh/sshd_config

# Register public key
ADD id_rsa.pub /root/.ssh/
RUN mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys && \
    chmod 700 /root/.ssh && \
    chmod 600 /root/.ssh/authorized_keys

EXPOSE 22
CMD service ssh start && /bin/bash
  1. apt-getopenssh-server をインストールします。
  2. echo "ユーザー名:パスワード" | chpasswd でパスワードを設定します。
  3. sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_configroot ユーザーのログインを許可するように設定を変更します。(デフォルトでは root ユーザーのログインは許可されていない)
  4. sed -i "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/" /etc/ssh/sshd_config で公開鍵認証を有効にするように設定を変更します。
  5. id_rsa.pub の中身を /root/.ssh/authorized_keys に記述します。
  6. /root/.ssh/ の権限を700に設定します。
  7. /root/.ssh/authorized_keys の権限を600に設定します。
  8. service ssh startsshd を起動します。