如何将 VSCode 连接到 GCP 实例

How to connect VSCode to GCP instances

我正在尝试将 VSCode 连接到我的 GCP 实例,但无法连接。从终端,我可以使用 gcloud compute ssh my_machine_name ssh 进入机器,但我不确定如何将其转换为 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 和我的配置中某处的真实主机名之间存在联系,但我找不到它。我找到了一个包含以下键的 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 实例?

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

假设:

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

这有点老套,但是:

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}

NOTE the above assumes a single network interface and a public IP

然后,用上面的值替换:

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

只需 运行 gcloud compute config-ssh,你就会在你的 vs 代码 ssh 目标中得到 example-instance.us-central1-a.MY-PROJECTconfig-ssh

中的详细信息

也可以使用 gcloud beta compute start-iap-tunnel INSTANCE_NAME 22 --listen-on-stdin 隧道 ssh 访问。 (即使没有 public ip)

gcloud iap tunnel docs

您的 ssh 配置文件:

Host YOUR_SERVER_NAME
    IdentityFile ~/.ssh/google_compute_engine
    User YOUR_USERNAME
    HostName YOUR_INSTANCE_NAME
    ProxyCommand gcloud beta compute start-iap-tunnel %h 22 --listen-on-stdin

注意: 如果您是 windows 的 运行 vscode 客户,您可能需要这样的东西

ProxyCommand powershell -Command "gcloud beta compute start-iap-tunnel %h 22 --listen-on-stdin"

您始终可以使用 ssh YOUR_SERVER_NAME -vvv 测试您的 ssh 连接(并查看 ProxyCommand 是否有效)。


我在 https://github.com/martinwang2002/gcp-vscode-server 中有此功能,具有 start on ssh connection and stop if inactive 功能。