私はいくつかのプロジェクトで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
問題は、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にキーを作成します。
上記の答えはほぼ正しいですが、最初に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