【问题标题】:GitLab CI failing with SSH error loading key invalid formatGitLab CI 因 SSH 错误加载密钥无效格式而失败
【发布时间】:2020-10-25 20:38:48
【问题描述】:

我开始为我的公司进入 GitLab CI。我们有一个 PrestaShop,我希望在 Git 推送后自动部署到 Web 服务器。

单元测试将在稍后进行。目前我只需要它来处理将“/app”文件夹的副本放在网络服务器的网络根目录中。

所以这就是我得到的......

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 环境变量 - 当然是 Web 服务器上的公共密钥。 SSH 在具有 WHM 和 cPanel 的 Web 服务器上启用。我通过 web 服务器上的 cPanel 将 master 的副本预先签出到 [repo 文件夹]。

【问题讨论】:

  • 您在容器中运行什么操作系统和版本?您在什么操作系统和版本上生成 SSH 密钥?您尝试连接到什么操作系统和版本?
  • 容器中的操作系统我不知道答案 - 我正在使用 GitLab.com,你知道在哪里可以找到它吗?它会在回购根目录中使用我的 docker-compose 吗?密钥是在 Windows 10 上生成的。远程服务器是 Redhat,我认为基于此系统信息:“Linux 3.10.0-957.21.2.el7.x86_64”
  • 只是为了测试,你能用旧格式的密钥试试吗(-m PEM,如stackoverflow.com/a/53645530/6309)?
  • 谢谢@VonC 我也会试试这个
  • 看起来我也无法通过 SSH 在本地连接到同一台服务器 - 相关?!

标签: ssh gitlab prestashop web-deployment gitlab-ci


【解决方案1】:

最初,OpenSSH 使用 PKCS #1 格式作为 RSA 私钥。这种格式不是很安全,所以较新的版本已经转移到另一种格式来存储专用于 OpenSSH 的私钥。这更安全,但不向后兼容。

虽然可以使用ssh-keygen 转换密钥,但最好创建一个仅用于部署的新密钥。这是一种最佳做法,因为它将您的个人密钥与部署分开,这意味着如果一个被泄露,另一个不会受到影响。

因为无论如何您都需要创建一个新密钥,所以最好使用 Ed25519 密钥。 Mozilla 和其他人推荐这种密钥格式,因为它快速、安全且易于生成恒定时间。您可以使用ssh-keygen -t ed25519 -f deployment-key 创建这样的密钥,其中deployment-keydeployment-key.pub 将是私钥和公钥。

如果你在服务器上使用 CentOS 7,它确实支持 Ed25519 密钥,前提是它已经适当地更新了补丁,并且你在 GitLab 上使用的任何东西也应该支持它。您需要将新的公钥添加到远程服务器,就像使用您的个人密钥一样。

如果你真的想继续使用这个密钥,你应该可以用ssh-keygen -e -m PEM导出它。

【讨论】:

  • 好建议!我现在就试试。
  • 我认为它不起作用。我使用您的命令通过 PowerShell 创建了新密钥。在 cPanel 上导入并激活公钥。使用新的私钥更新了 GitLab 上的全局变量。我仍然有同样的错误再次运行 CI...Error loading key "/dev/fd/63": invalid format
  • 你的钥匙里面有回车吗?如果是这样,你需要把它们去掉。
  • 从我在 GitLab 上的私钥中删除了所有 CR/LB,但仍然是同样的错误
猜你喜欢
  • 2020-01-28
  • 2023-03-10
  • 1970-01-01
  • 2019-12-08
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多