使用GitLab CI,我想将生产代码推送到远程Web主机。
为了连接SSH,我正在将密钥对的私钥存储在我的GitLab仓库的变量中。我还将公钥复制到服务器的authorized keys中。这是我的.gitlab-ci.yml
的一部分。
image: ubuntu
before_script:
# Setup SSH credentials and known host
- which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 700 ~/.ssh/id_rsa
- eval "$(ssh-agent -s)"
- ssh-add ~/.ssh/id_rsa
- echo "$SSH_KNOWN_HOSTS"
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
这种方法是可行的,但我对其安全性有所质疑。我的私钥能否通过这种方式得到保障?还有其他方法可以达到我想要的结果吗?
编辑:我特别在质疑生产环境中此方法的安全性。
cat id_rsa | base64 -w0
将以下代码插入到.gitlab-ci.yml
中的脚本部分:mkdir -p ~/.ssh && echo "$SSH_PRIVATE_KEY" | base64 -d > ${SSH_KEY_FILE} && chmod 0600 ${SSH_KEY_FILE}
- sneaky