22

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

現在、Dockerfile で以下を使用して ssh キー ペアを生成しています。しかし、これにより「/bin/sh ssh-keygenが見つかりません」というエラーが表示されます

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

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

ありがとう、ヤシュ

4

2 に答える 2

48

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

次の 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 にキーを作成します。

于 2014-12-16T12:17:30.747 に答える
5

上記の答えはほぼ正しいですが、最初に 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
于 2016-08-04T18:37:19.393 に答える