目次
概要
コンテナ上に ssh サーバーを起動し、パスワード認証または公開鍵認証を行う方法について解説します。
パスワードでログインする Docker コンテナ
使い方
ソースは pystyle/docker/ssh_passwd になります。
- Dockerfile をダウンロードします
docker-compose up -d
でコンテナをビルドし、バッググラウンドで起動しますssh root@<Docker が起動しているマシンのホスト> -p 2222
でログインします- 例:
ssh@127.0.0.1 -p 2222
- 例:
- 初回起動時は公開鍵の指紋を登録するかどうか聞かれるので
yes
と入力しますECDSA key fingerprint is SHA256:0ttTa27iNJPpxLHNXIAhRwWKOxuRcbYFw9QLMChFXiU. Are you sure you want to continue connecting (yes/no)?
- パスワードに
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
apt-get
でopenssh-server
をインストールします。echo "ユーザー名:パスワード" | chpasswd
でパスワードを設定します。sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config
でroot
ユーザーのログインを許可するように設定を変更します。(デフォルトではroot
ユーザーのログインは許可されていない)service ssh start
でsshd
を起動します。
公開鍵でログインする Docker コンテナ
使い方
ソースは pystyle/docker/ssh_pubkey になります。
- Dockerfile をダウンロードします
- 鍵が用意できていない場合は
ssh-keygen
コマンドで秘密鍵と公開鍵を作成します。いくつか聞かれますが、すべてデフォルトで大丈夫です。 ~/.ssh/id_rsa.pub
(Windows の場合、C:\Users\<USERNAME>\.ssh\id_rsa
) に公開鍵が作成されるので、これをDockerfile
があるディレクトリと同じ場所に起きます。docker-compose up -d
でコンテナをビルドし、バッググラウンドで起動しますssh root@<Docker が起動しているマシンのホスト> -p 2222 -i <秘密鍵のパス>
でログインします- 例:
ssh root@127.0.0.1 -p 2222 -i ~/.ssh/id_ras
- 例:
- 初回起動時は公開鍵の指紋を登録するかどうか聞かれるので
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_hosts
でknown_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
apt-get
でopenssh-server
をインストールします。echo "ユーザー名:パスワード" | chpasswd
でパスワードを設定します。sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config
でroot
ユーザーのログインを許可するように設定を変更します。(デフォルトではroot
ユーザーのログインは許可されていない)sed -i "s/#PubkeyAuthentication yes/PubkeyAuthentication yes/" /etc/ssh/sshd_config
で公開鍵認証を有効にするように設定を変更します。id_rsa.pub
の中身を/root/.ssh/authorized_keys
に記述します。/root/.ssh/
の権限を700に設定します。/root/.ssh/authorized_keys
の権限を600に設定します。service ssh start
でsshd
を起動します。
コメント