加载密钥“/root/.ssh/id_rsa”时出错:格式无效

the*_*kyi 5 amazon-ec2 gitlab gitlab-ci

我正在使用 GitLab 为我的 django 项目构建 CI/CD。作为部署阶段的一部分,我有

deploy:
  stage: deploy
  script:
    - mkdir -p ~/.ssh
    - echo "$PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - cat ~/.ssh/id_rsa
    - chmod 700 ~/.ssh/id_rsa
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/id_rsa
    - ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts
    - chmod +x ./deploy.sh
    - scp  -o StrictHostKeyChecking=no -r ./.env ./docker-compose.prod.yml ec2-user@$EC2_PUBLIC_IP_ADDRESS:/home/ec2-user/app
    - bash ./deploy.sh
  only:
    - master
Run Code Online (Sandbox Code Playgroud)

构建失败,ssh-add ~/.ssh/id_rsa并显示错误消息Error loading key "/root/.ssh/id_rsa": invalid format

我检查过有类似错误消息问题的人,但似乎没有一个与我正在做的事情相关。

笔记

  1. 我正在尝试部署到亚马逊ec2
  2. 我正在关注本教程https://testdriven.io/blog/deploying-django-to-ec2-with-docker-and-gitlab/,直到最后一点为止,一切似乎都工作正常。

the*_*kyi 1

我在 ##aws irc 频道的人员帮助下成功修复了该问题

问题

我生成了 PKCS#1 密钥格式而不是 PKCS#8 格式。PKCS#1 表示为:

-----BEGIN RSA PRIVATE KEY-----
BASE64 ENCODED DATA
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

PKCS#8 表示为:

-----BEGIN PRIVATE KEY-----
BASE64 ENCODED DATA
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

解决方案

我只是复制了私钥并在此处进行了转换https://decoder.link/rsa_converter

您还可以在这里看到更好的说明“BEGIN RSA PRIVATE KEY”和“BEGIN PRIVATE KEY”之间的差异

编辑 如下所示,使用网站进行转换不是一个好主意。特别是当您的私钥可能被发送到他们的服务器时。 相反,按照 @csgeek此处的指示在本地进行转换

  • 可能值得注意的是,该网站将您的私钥发送到其服务器。我建议不要使用这样的网站来转换您的私钥。 (4认同)
  • 这是一个更好的本地模式:https://gist.github.com/gtaban/410db2351e52ae36a2a636f3cc6f86ac (2认同)