从 CD 管道通过 SSH 连接到 Compute Engine VM

SSH into Compute Engine VM from CD Pipeline

让我的 Google 服务帐户从 bitbucket 管道通过 ssh 进入我们的 Compute Engine 实例,这让我很费力。

Script:
gcloud compute ssh instance1 --zone us-central1-a --quiet --verbosity=info --command="gracefully shutdown processes" && \
gcloud compute scp ~/ instance1:~/ --zone us-central1-a --quiet --recurse --compress && \
gcloud compute ssh instance1 --zone us-central1-a --quiet --verbosity=info --command="start the services"

ERROR: (gcloud.compute.ssh) Could not SSH into the instance.  It is possible that your SSH key has not propagated to the instance yet. Try running this command again.  If you still cannot connect, verify that the firewall and instance are set to accept ssh traffic.
Permission denied (publickey).
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].

我什至尝试过不用 gcloud 的老式 SSH 连接方式。我使用 metadata 将 public 键添加到实例中。我可以在我的本地计算机上通过 SSH 登录,但是使用 bitbucket 管道时,我收到权限被拒绝的错误。

script:
        - echo $PRIVATE_SSH_KEY > ./ssh_key
        - chmod 400 ssh_key
        - ssh -t -t -i ssh_key bitbucket-service-account@<IP>

Permission denied (publickey).

我可能做错了什么?

需要角色 https://www.googleapis.com/auth/compute。 将该角色添加到您的 VM 的服务帐户 [1]。 不幸的是,Google 云文档中尚未记录。

[1]https://cloud.google.com/iam/docs/granting-roles-to-service-accounts

感谢您帮助 Alessio。我在四处挖掘后才弄明白。

  1. 使用 bitbucket ssh keygen 工具创建 bitbucket 密钥对
  2. 将步骤 1 中的 public 密钥复制到 Compute Engine 实例,但请记住在密钥末尾粘贴您的 bitbucket 用户名
  3. ssh -i ~/.ssh/config <Bitbucket-Username>@<IP-OF-VM>