概要
社内のGitLabでCI/CDを実現するためにGitLab RunnerをDocker outside of Docker (DooD)で構築。
その際に検証環境へscpコマンドで docker イメージを送る必要があり、その際にパスワードを聞かれて失敗します。
そのため、パスワードレスで検証環境のサーバへ接続するために鍵交換を行う必要があります。
今回はCI/CDで鍵交換を行ったので、そのときの備忘録を残します。
環境
- GitLab
解決策
大まかな流れとしては下記の通りです。
- 暗号鍵・公開鍵を生成
- 1.で生成した公開鍵を検証環境のサーバにて鍵交換して、パスワードレスで接続できることを確認
GitLabに1. で作成した暗号鍵を変数として登録.gitlab-ci.ymlのbefore_scriptにて暗号鍵を登録して、検証環境のサーバへ接続
ここでは、4.の.gitlab-ci.ymlに関して掘り下げます。
.gitlab-ci.ymlのbefore_scriptの内容
.gitlab-ci.ymlのscriptの内容は下記になります。
before_script:
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "${SSH_PRIVATE_KEY}" >> ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
# ssh-agentの起動
- eval `ssh-agent`
- ssh-add ~/.ssh/id_rsa
# 初めてのホストへの接続を確認されないようにするため、StrictHostKeyChecking no を記載
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
${SSH_PRIVATE_KEY}はGitLabの変数で登録した秘密鍵の内容となります。
まとめ
今回はCI/CDで鍵交換を行いました。
上記で実現することができ、バージョンが上がったとしても利用できると思われます。