我开始为我的公司进入 GitLab CI。我们有一个 PrestaShop,我希望在 Git 推送后自动部署到 Web 服务器。
单元测试将在稍后进行。目前我只需要它来处理将“/app”文件夹的副本放在 Web 服务器的 Web 根目录中。
所以这就是我得到的......
before_script:
- apt-get update -qq
- apt-get install -qq git
- 'which ssh-agent || ( apt-get install -qq openssh-client )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
deploy_test:
type: deploy
environment:
name: test
url: [test server domain]
script:
- ssh [user]@[server] -p [port] "cd [repo folder] && git checkout master && git pull origin master && exit"
- ssh [user]@[server] -p [port] "rsync -rzvh [repo /app folder] [web server root path]"
only:
- master
最近,gitlab-runner 开始失败并出现错误 Error loading key "/dev/fd/63": invalid format
.你能帮我解决这个错误吗?
仅供引用,我在 GitLab 中将我的个人私钥设置为 $SSH_PRIVATE_KEY 环境变量 - 当然是网络服务器上的公共(public) key 。 SSH 在具有 WHM 和 cPanel 的 Web 服务器上启用。我通过 Web 服务器上的 cPanel 将 master 的副本预先 checkout 到 [repo 文件夹]。
最佳答案
最初,OpenSSH 使用 PKCS #1 格式作为 RSA 私钥。这种格式不是很安全,所以较新的版本已经转移到另一种格式来存储专用于 OpenSSH 的私钥。这更安全,但它不向后兼容。
虽然可以使用 ssh-keygen
转换 key ,您最好创建一个仅用于部署的新 key 。这是一种最佳实践,因为它将您的个人 key 与部署分开,这意味着如果一个被泄露,另一个不会受到影响。
由于无论如何您都需要创建一个新 key ,因此最好使用 Ed25519 key 。 Mozilla其他人推荐这种格式的 key ,因为它快速、安全且易于生成恒定时间。您可以使用 ssh-keygen -t ed25519 -f deployment-key
创建这样的 key , 其中 deployment-key
和 deployment-key.pub
将是私钥和公钥。
如果你在服务器上使用 CentOS 7,它确实支持 Ed25519 key ,前提是它已经适本地更新了补丁,并且你在 GitLab 上使用的任何东西也应该支持它。您需要将新的公钥添加到远程服务器,就像使用您的个人 key 一样。
如果你真的想继续使用这个 key ,你应该可以用ssh-keygen -e -m PEM
导出它。 .
关于ssh - GitLab CI 因 SSH 错误加载 key 无效格式而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62743906/