如何从CircleCI部署到Google Compute Engine?

时间:2017-04-09 10:12:28

标签: ssh google-cloud-platform google-compute-engine circleci

我希望在CI测试后将CircleCi的工件部署到Google Compute Engine, 但我陷入了SSH密钥问题 当gcloud compute copy-files运行时,gcloud将在CircleCI的部署过程中请求生成ssh密钥,我不知道如何处理。

  

警告:gcloud的公共SSH密钥文件不存在   警告:gcloud的私有SSH密钥文件不存在   警告:您没有用于gcloud的SSH密钥。
  警告:将执行SSH keygen以生成密钥   生成公钥/私钥rsa密钥对   输入密码(无密码短语为空):

我查看了文档herehere,但没有提到与SSH相关的主题。那么我应该使用什么SSH密钥以及如何安全地将其传递给gcloud?

[增订] 这是我在部署步骤中的命令。

  - echo $GCLOUD_SERVICE_KEY | base64 --decode --ignore-garbage > ${HOME}/gcloud-service-key.json
  - sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update
  - sudo /opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
  - sudo /opt/google-cloud-sdk/bin/gcloud config set project $GCLOUD_PROJECT_ID
  - sudo /opt/google-cloud-sdk/bin/gcloud compute copy-files ./dist instance-1:/tmp/ --zone $GCLOUD_INSTANCE_ZONE

2 个答案:

答案 0 :(得分:3)

第一个错误:

  

输入密码(无密码短语为空):

  • 您必须添加--quiet标记。
  

gcloud compute copy-files

     

此命令可确保用户的公共SSH密钥存在于项目的元数据中。如果用户没有公共SSH密钥,则使用ssh-keygen(1)生成一个密钥(如果给出了--quiet标志,则生成的密钥将具有空密码)。

https://cloud.google.com/sdk/gcloud/reference/compute/copy-files

第二个错误:

  

权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic)

  • 在实例名称338234243-compute@instance-1:/tmp
  • 之前添加用户
  • 删除实例路径的最后/ instance-1:/tmp
  • 检查tmp目录的所有者(您选择的用户应该有R& W右侧)

默认情况下,我生成的ssh密钥的用户似乎是root,而GCC sshd不允许root连接......

答案 1 :(得分:1)

我有同样的问题,在修补更多并阅读google cloud docs后,我意识到我需要生成一个ssh密钥。

我使用CircleCI(这也适用于TravisCI),这是我添加到circle.yml文件中以生成ssh密钥的命令: - ssh-keygen -q -N "" -f ~/.ssh/google_compute_engine