ssh - GitLab CI 因 SSH 错误加载 key 无效格式而失败

标签 ssh gitlab prestashop web-deployment gitlab-ci

我开始为我的公司进入 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-keydeployment-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/

相关文章:

objective-c - 在 Cocoa 应用程序中运行 ssh-askpass

macos - rsub with sublime 和 ssh 连接被拒绝

git push 失败,拒绝更新 stash 引用

docker - Gitlab CI 运行代码质量不生成 .json 文件

php - Prestashop 产品功能 PHP SQL

git - 如何从远程 ssh 传入 git rsa 密码?

ssh - list 中某些主机的身份验证或权限失败

gitlab - 我可以在 GitLab 中获取 wiki 页面列表吗?

mysql - 我如何将我可以插入表中的行数限制为 Mysql 服务器中的一行?

debugging - Prestashop 调试 Hook