投稿目的
- よりよい方法をご教授いただきたい
- 前回記事の訂正
前回記事はこちらです。
本題
そのままgit clone
するとwarningが発生...
前回の拙著「Docker 便利なコンテナを作成できるDockerfileを紹介させてください」において、「すでにWSL上に存在するSSH鍵を、コンテナにもコピーし使用する」という内容をご紹介しました。
前回記事の内容でも、GitHubからのリポジトリclone自体は成功しますが、以下のようなwarningが発生します。
以後にgit fetch
などを実行した際も、同じwarningがずっと表示されます。
// clone実行
$ git clone [リポジトリのURL]
Cloning into '[リポジトリ]'...
// 「yes」を入力
The authenticity of host 'github.com (20.27.177.113)' can't be established.
[秘密鍵] key fingerprint is [秘密鍵の内容].
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
> yes
// warningが発生(失敗)
Failed to add the host to the list of known hosts (/home/$USERNAME/.ssh/known_hosts).
remote: Enumerating objects: 687, done.
remote: Counting objects: 100% (687/687), done.
remote: Compressing objects: 100% (369/369), done.
remote: Total 687 (delta 335), reused 605 (delta 255), pack-reused 0 (from 0)
Receiving objects: 100% (687/687), 686.19 KiB | 1022.00 KiB/s, done.
Resolving deltas: 100% (335/335), done.
「Failed to add the host to the list of known hosts (/home/$USERNAME/.ssh/known_hosts).」
→「/home/$USERNAME/.ssh/known_hosts
にホスト情報を追記できませんでした...」という内容ですね。
known_hosts
とは
参考記事 はてなブログ 様
SSHで接続したホストについて、ホストの公開鍵(共通鍵)が~/.ssh/known_hosts
に記載されていくようです。
この~/.ssh/known_hosts
に公開鍵の情報が記載されていると、次回以降もSSH接続がスムーズに実行されます。
先ほどのwarningは「~/.ssh/known_hosts
に書き込みができなかったよ」という内容です。
ファイルに書き込みができないのは、大抵権限関係の問題があります。
ls
コマンドで~/.ssh
ディレクトリの中身を見てみます。
$ ls -al .ssh
total 16
drwxr-xr-x 1 root root 4096 Jan 15 13:05 ./
drwxr-x--- 1 $USERNAME $USERNAME 4096 Jan 20 12:22 ../
-rw-r--r-- 1 root root 411 Jan 15 13:05 id_ed25519
-rw-r--r-- 1 root root 100 Jan 15 13:05 id_ed25519.pub
~/.ssh
ディレクトリ自体も、配下のファイル類もすべてroot
の持ち物になってしまっています...
これを$USERNAME
の持ち物にすれば、うまくできそうです。
Dockerfileの内容を修正する
今回のDockerfileはこちらです。
FROM ubuntu:latest
# 必要なパッケージ類のインストール(ご自身が必要と思うものを追加してください)
RUN apt-get upgrade && apt-get update && apt-get install -y \
sudo\
wget\
git\
curl\
tree\
ssh\
net-tools\
docker.io\
docker-compose-v2\
python3-setuptools
# ユーザを追加し、sudoをパスワードなしで有効化する
ARG USERNAME=<あなたのユーザ名>
ARG GROUPNAME=<あなたのグループ名>
ARG UID=<あなたのユーザID>
ARG GID=<あなたのグループID>
ARG PASSWORD=<あなたのパスワード>
RUN groupadd -g $GID $GROUPNAME && \
useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
echo $USERNAME:$PASSWORD | chpasswd && \
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER $USERNAME
WORKDIR /home/$USERNAME/
# Gitのタブ補完を有効化するためのスクリプトを取得
RUN wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -O ~/.git-completion.bash
RUN wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
# このDockerfileが存在するディレクトリにgit-prompt-sample.txtを作成し、.bashrcに記載したい内容を書いておく
COPY git-prompt-sample.txt /home/$USERNAME/git-prompt-sample
RUN cat git-prompt-sample >> .bashrc
# SSH鍵のコピー
COPY <秘密鍵のファイル名> /home/$USERNAME/.ssh/<秘密鍵のファイル名>
COPY <公開鍵のファイル名> /home/$USERNAME/.ssh/<公開鍵のファイル名>
# 以下を追加
# SSHに関するディレクトリ・ファイルの所有者・権限の変更
RUN sudo chown $USERNAME:$GROUPNAME /home/$USERNAME/.ssh
RUN sudo chown $USERNAME:$GROUPNAME /home/$USERNAME/.ssh/<秘密鍵のファイル名>
RUN sudo chmod 0600 /home/$USERNAME/.ssh/<秘密鍵のファイル名>
RUN sudo chown $USERNAME:$GROUPNAME /home/$USERNAME/.ssh/<公開鍵のファイル名>
追加したコマンドのうち、以下1行だけを追加してもwarningを消すとこはできます。
# /home/$USERNAME/.sshディレクトリの所有者を$USERNAMEにする
RUN sudo chown $USERNAME:$GROUPNAME /home/$USERNAME/.ssh
ですが、この場合はSSH鍵の所有者がrootのままになってしまい気持ち悪いので、念のため秘密鍵の所有者変更・権限変更、公開鍵の所有者変更を実施しています。
# 秘密鍵のファイルの所有者を$USERNAMEにする
RUN sudo chown $USERNAME:$GROUPNAME /home/$USERNAME/.ssh/<秘密鍵のファイル名>
# 秘密鍵のファイルは所有者による読み取り・書き込みのみ可能にする
RUN sudo chmod 0600 /home/$USERNAME/.ssh/<秘密鍵のファイル名>
# 公開鍵のファイルの所有者を$USERNAMEにする
RUN sudo chown $USERNAME:$GROUPNAME /home/$USERNAME/.ssh/<公開鍵のファイル名>
以上を追加することで、git clone
時に表示されていたwarningが表示されなくなり、すんなりGitHubに接続できました。
// clone実行
$ git clone [リポジトリのURL]
Cloning into '[リポジトリ]'...
// 「yes」を入力
The authenticity of host 'github.com (20.27.177.113)' can't be established.
[秘密鍵] key fingerprint is [秘密鍵の内容].
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
> yes
// warningが発生しない(内容が安全である)
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
remote: Enumerating objects: 687, done.
remote: Counting objects: 100% (687/687), done.
remote: Compressing objects: 100% (369/369), done.
remote: Total 687 (delta 335), reused 605 (delta 255), pack-reused 0 (from 0)
Receiving objects: 100% (687/687), 686.19 KiB | 1022.00 KiB/s, done.
Resolving deltas: 100% (335/335), done.
まとめ
前回記事の時点でよく確認しておくべきでした... 失礼いたしました m(_ _)m