如何将VSCode连接到GCP实例

问题描述

我正在尝试将VSCode连接到我的GCP实例,但是无法连接。从终端,我可以使用gcloud compute ssh my_machine_name进入计算机,但是我不确定如何将其转换为VSCode Remote-SSH正在寻找的内容。当我在VSCode中创建配置时,我这样做:

Host my_machine_name
    HostName my_machine_name
    User me@my_company.com

但是HostName是错误的,因为它只是计算机的名称,而不是完整的HostName或IP地址。我什至没有告诉VSCode这是一个GCP实例。如何找到主机名?我想在my_machine_name和我的配置中某个地方的真实HostName之间存在联系,但是我找不到它。我找到了具有以下键的GCP-Service.json文件

{
  "type": 
  "project_id": 
  "private_key_id": 
  "private_key": 
  "client_email": 
  "client_id": 
  "auth_uri": 
  "token_uri": 
  "auth_provider_x509_cert_url": 
  "client_x509_cert_url": 
}

但是我看不到任何看起来像主机名或IP地址的东西。

只是看,我尝试连接并出现以下错误

Could not establish connection to "my_machine_name": Permission denied (publickey).

(请注意这是否相关,但是有时当我第一次尝试连接时,会收到以下消息,但是在单击“重试”后,它又回到公钥消息):

"Could not establish connection to "my_machine_name": Remote host key has changed,port forwarding is disabled."

所以我试图像这样添加一个私钥:

Host my_machine
    HostName my_machine
    User user@my_company.com
    IdentityFile ~/.ssh/id_rsa

我也尝试了GCP-Service.json文件中的私钥,但是得到了相同的结果。我应该怎么做才能将VSCode连接到我的GCP实例?

解决方法

只需运行 gcloud compute config-ssh,您就会在 vs code ssh 目标中获得 example-instance.us-central1-a.MY-PROJECT。详情请见 config-ssh

,

根据我的评论,这很简单并且对我有用。

假设:

PROJECT=[[YOUR-PROJECT]]
INSTANCE=[[YOUR-INSTANCE]]
ZONE=[[YOUR-ZONE]]

这有点hacky,但是:

USER=$(\
  gcloud compute ssh ${INSTANCE} \
  --zone=${ZONE} \
  --project=${PROJECT} \
  --command "whoami") && echo ${USER}

或者:

gcloud auth list --format="value(account)"
[[USER]]@[[DOMAIN]]

并且:

IP=$(\
  gcloud compute instances describe ${INSTANCE} \
  --zone=${ZONE} \
  --project=${PROJECT} \
  --format='value(networkInterfaces[0].accessConfigs[0].natIP)') && echo ${IP}

注意,以上假设单个网络接口和一个公共IP

然后,将上述值替换为:

Host compute_engine
    HostName [[IP]]
    IdentityFile ~/.ssh/google_compute_engine
    User [[USER]]
    Port 22