如何将 VSCode 连接到 GCP 实例

jss*_*367 5 google-cloud-platform gcloud visual-studio-code vscode-remote

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

Host my_machine_name
    HostName my_machine_name
    User me@my_company.com
Run Code Online (Sandbox Code Playgroud)

但是 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": 
}
Run Code Online (Sandbox Code Playgroud)

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

只是为了看看,我尝试连接并收到以下错误:

Could not establish connection to "my_machine_name": Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

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

"Could not establish connection to "my_machine_name": Remote host key has changed, port forwarding is disabled."
Run Code Online (Sandbox Code Playgroud)

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

Host my_machine
    HostName my_machine
    User user@my_company.com
    IdentityFile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

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

Pan*_* Li 11

只需运行gcloud compute config-ssh,您就会进入example-instance.us-central1-a.MY-PROJECT您的 vs 代码 ssh 目标。config-ssh 上的详细信息

  • 恕我直言,这是更好的答案 (3认同)
  • @Tariq 阅读此 https://learn.canceridc.dev/cookbook/virtual-machines/using-vs-code-with-gcp-vms (2认同)

Daz*_*kin 8

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

假设:

PROJECT=[[YOUR-PROJECT]]
INSTANCE=[[YOUR-INSTANCE]]
ZONE=[[YOUR-ZONE]]
Run Code Online (Sandbox Code Playgroud)

这有点hacky,但是:

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

或者:

gcloud auth list --format="value(account)"
[[USER]]@[[DOMAIN]]
Run Code Online (Sandbox Code Playgroud)

和:

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

注意上面假设有一个网络接口和一个公共IP

然后,将这些值替换为上面的值:

Host compute_engine
    HostName [[IP]]
    IdentityFile ~/.ssh/google_compute_engine
    User [[USER]]
    Port 22
Run Code Online (Sandbox Code Playgroud)

  • 您需要使用我展示的命令将“IP”和“USER”替换为您的帐户和虚拟机的实际值 (2认同)

小智 6

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

gcloud iap 隧道文档

你的 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
Run Code Online (Sandbox Code Playgroud)

注意:如果你在 Windows 上运行 vscode 客户端,你可能需要这样的东西

ProxyCommand powershell -Command "gcloud beta compute start-iap-tunnel %h 22 --listen-on-stdin"
Run Code Online (Sandbox Code Playgroud)

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


我在https://github.com/martinwang2002/gcp-vscode-server中有这个,具有在 ssh 连接上启动并在不活动时停止的功能。