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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.