1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker SSH鍵に関するディレクトリ・ファイルの権限は本ユーザにしておこう

Posted at

投稿目的

  • よりよい方法をご教授いただきたい
  • 前回記事の訂正

前回記事はこちらです。

本題

そのまま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

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?