我希望在CI测试后将CircleCi的工件部署到Google Compute Engine,
但我陷入了SSH密钥问题
当gcloud compute copy-files
运行时,gcloud将在CircleCI的部署过程中请求生成ssh密钥,我不知道如何处理。
警告:gcloud的公共SSH密钥文件不存在 警告:gcloud的私有SSH密钥文件不存在 警告:您没有用于gcloud的SSH密钥。
警告:将执行SSH keygen以生成密钥 生成公钥/私钥rsa密钥对 输入密码(无密码短语为空):
我查看了文档here和here,但没有提到与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
答案 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
默认情况下,我生成的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