web-dev-qa-db-ja.com

dockerfileを使用したSSHキーの生成

私はいくつかのプロジェクトでDockerを使用していますが、1つの要件はDockerファイルを使用してsshキーを生成することです。これにより、コンテナーのビルド時に、RSAキーのペアが生成されます。 Dockerfileには、その.shファイルを実行するためのcommondがあります。 .shの代わりにDockerfileで直接行う方法はありますか

現在、私はskerキーペアを生成するためにDockerfileで以下を使用しています。しかし、これにより「/ bin/sh ssh-keygen not found」というエラーが表示されます

RUN ssh-keygen -q -t rsa -N '' -f /home/docker/.ssh/id_rsa

誰かが同じことを達成する方法を提供できれば、本当に非常に役立ちます。

ありがとう、Yash

15
priyank

問題は、ssh-keygenがコンテナーでまだ使用できないことです。これは、たとえばUbuntuのベースイメージにopenssl-clientパッケージをインストールすることで簡単に解決できます。

次のDockerfileはそれを正確に実行し、コンテナのルートフォルダにキーを配置します

FROM ubuntu:latest

RUN apt-get -y install openssh-client
RUN ssh-keygen -q -t rsa -N '' -f /id_rsa

しかし、これを読んでください:私の強力なアドバイスは、コンテナのファイルシステムにキーや証明書を一切配置しないことです!これは、本質的にコンテナイメージを取得する誰でもキーが有効なサービスで自分自身を認証できるため、強力なセキュリティリスクにつながる可能性があります。暗号化キーと証明書を扱うときと同じように注意してコンテナイメージを処理する必要があります。

したがって、コンテナの外にキーを保持することをお勧めします。これは、Docker VOLUMESを使用することで簡単に実現できます。起動時に、キー/コンテナーを保持するボリュームをDockerコンテナーにマウントするだけです。

コンテナの外にキーを作成する次のDockerfileは、コンテナが起動すると、代わりにキーを作成します。これを使用して、コンテナのファイルシステムの外部にキーを作成できます。

FROM ubuntu:latest
RUN apt-get -y install openssh-client 
CMD ssh-keygen -q -t rsa -N '' -f /keys/id_rsa

まず、次のコマンドでコンテナをビルドします。

docker build -t keygen-container .

を使用したコンテナの開始

docker run -v /tmp/:/keys keygen-container

ホストの/ tmpにキーを作成します。

29
eliasw

上記の答えはほぼ正しいですが、最初にapt-get updateする必要があります。多分それは前のubuntuイメージでは正しいのですが、私にはうまくいきませんでした。また、最初にlocalhostディレクトリに存在する可能性のあるid_rsaファイルをすべて削除します。

printf "FROM ubuntu:latest \nRUN apt-get update; apt-get -y install openssh-client \nCMD rm /keys/id_rsa*; ssh-keygen -q -t rsa -N '' -f /keys/id_rsa" > Dockerfile
docker build -t keygen-container .
docker run -v /tmp/:/keys keygen-container
4
James Drummond