Dockerコンテナ内でssh keyを使う

Dockerコンテナでビルドパイプラインなどを作っていると、コンテナ内からgit fetchしたくなります。しかしsshでgit fetchしようとすると、コンテナ内との鍵の管理がめんどうになります。

コンテナ内でssh用の鍵を使う方法としては

  1. コンテナ用の鍵を生成してbuild時にコピーする
  2. ホストの.sshをコンテナにマウントする

の2パターンが考えられます。

1の場合、ホストだけでなくコンテナ用の鍵をいちいち生成しなくてはならず、またGithubなどのdeploykeyに登録をしないといけなくなります。さらにDockerfileがgit管理されている環境ではコンテナ用のprivate keyをリポジトリにコミットしてしまう恐れもあります。

したがって2の場合を考えて行きたいのですが、普通に.sshをコンテナにマウントすると、.ssh/configのownerがホスト側のユーザーになってしまい、コンテナからsshしようとするとpermission errorになってしまいます。

解決策としては、マウント先は一時ファイルに.sshをマウントしておき、コンテナ実行時にコンテナのホームディレクトリにコピーすることで.sshのpermissionが正しくなります。

コンテナ実行時に.sshをコピーするために、ENTRYPOINTは以下のようなシェルスクリプトにします。

あとはdocker run時に.sshを一時ファイルへマウントすればOKです

docker run -v /home/user/.ssh:/tmp/.ssh

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください