🕌
Gitlab CI/CD の環境変数で秘密鍵をマスクしたい
問題
^[-A-Za-z0-9+\/@:.~=]{8,}$
CI/CD の環境変数変数の設定で、マスクできる文字列の条件が上記なため、改行やスペースが入っている値がマスクできない。
Mask a CI/CD variable
解決
base64 でエンコードした値を使う。
$ cat /path/to/SSH_PRIVATE_KEY | base64 -w0
mac な場合。
$ cat /path/to/SSH_PRIVATE_KEY | base64 -b 0
使用時はデコードして使う。
.gitlab-ci.yaml
stages:
- ssh
hostname:
stage: ssh
image: alpine:latest
before_script:
- apk add --no-cache openssh-client
- eval $(ssh-agent -s)
- echo "${SSH_PRIVATE_KEY}" | base64 -d | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "host *" > ~/.ssh/config
- echo " User ${SSH_USER}" >> ~/.ssh/config
- echo " Port ${SSH_PORT}" >> ~/.ssh/config
- echo " StrictHostKeyChecking no" >> ~/.ssh/config
- echo " UserKnownHostsFile=/dev/null" >> ~/.ssh/config
- chmod 600 ~/.ssh/config
script:
- ssh ${SSH_HOST} "hostname"
Discussion
これは初めて知りました。覚えておきます。
こういう鍵ファイルは
Type
をFile
にすると便利です。SSH_PRIVATE_KEY
環境変数には値の代わりに値を保存したファイルへのパスが設定されています。