如何配置SSH通过IAP隧道连接GCP虚拟机实现VS Code远程开发
GCP私有虚拟机通过IAP隧道配置VS Code远程SSH
问题背景
我有一台GCP上的私有虚拟机,只有内部IP。要在VS Code里远程开发并通过SSH连接它,只能用IAP隧道。
我已经在CLI执行了以下gcloud命令生成SSH密钥:
gcloud compute ssh vm-instance-name -zone us-central1-a --tunnel-through-iap --dry-run
得到的输出是:
"C:\Users\username\AppData\Local\Google\Cloud-SDK\google-cloud-sdk\bin\sdk\putty.exe" -t -i C:\Users\username\.ssh\google_compute_engine.ppk -proxycmd ""C:\\Users\\username\\AppData\\Local\\Google\\Cloud-SDK\\google-cloud-sdk\\bin\\..\\platform\\bundledpython\\python.exe" "-S" "C:\\Users\\username\\AppData\\Local\\Google\\Cloud-SDK\\google-cloud-sdk\\lib\\gcloud.py" compute start-iap-tunnel ssh-remote-vm %port --listen-on-stdin --project=project-name --zone=us-central1-a --verbosity=warning" rajamannar_k@compute.1363457738033948822
我当前的~/.ssh/config配置如下:
Host compute.1363457738033948822 HostName compute.1363457738033948822 IdentityFile C:\Users\rajamannar_k\.ssh\google_compute_engine CheckHostIP no UserKnownHostsFile C:\Users\rajamannar_k\.ssh\google_compute_known_hosts HostKeyAlias compute.1363457738033948822 IdentitiesOnly yes StrictHostKeyChecking no ProxyCommand "C:\\Users\\rajamannar_k\\AppData\\Local\\Google\\Cloud-SDK\\google-cloud-sdk\\bin\\..\\platform\\bundledpython\\python.exe" "-S" "C:\\Users\\rajamannar_k\\AppData\\Local\\Google\\Cloud-SDK\\google-cloud-sdk\\lib\\gcloud.py" compute start-iap-tunnel ssh-remote-vm %port --listen-on-stdin --project=project-name --zone=us-central1-a --verbosity=warning ProxyUseFdpass no User rajamannar_k
请问怎么配置~/.ssh/config才能连接虚拟机进行远程开发?或者在VS Code的「Remote-SSH: add-new-host」里应该输入什么命令?(备注:我用的是Windows机器)
解决方案
一、修正~/.ssh/config配置
你当前的配置里有个关键错误:ProxyCommand中的ssh-remote-vm要替换成你的实际虚拟机实例名(也就是执行gcloud compute ssh时用的vm-instance-name)。另外建议简化路径,直接调用gcloud命令更可靠,修改后的配置如下:
Host gcp-private-vm # 可以自定义一个好记的主机名,比如这个 HostName compute.1363457738033948822 User rajamannar_k IdentityFile C:\Users\rajamannar_k\.ssh\google_compute_engine CheckHostIP no UserKnownHostsFile C:\Users\rajamannar_k\.ssh\google_compute_known_hosts HostKeyAlias compute.1363457738033948822 IdentitiesOnly yes StrictHostKeyChecking no # 简化ProxyCommand,避免复杂路径引用 ProxyCommand gcloud compute start-iap-tunnel %h %p --listen-on-stdin --project=project-name --zone=us-central1-a ProxyUseFdpass no
配置说明:
- 自定义
Host字段为好记的名称,方便VS Code里快速选择 %h会自动替换成HostName,%p替换成默认SSH端口22,无需手动填写- 确保
--project和--zone参数和你的GCP项目、虚拟机区域完全一致
配置完成后,打开VS Code的Remote-SSH插件,就能看到你自定义的gcp-private-vm主机,直接选择连接即可。
二、VS Code「Remote-SSH: add-new-host」直接输入命令
如果不想手动修改配置文件,可在VS Code的「Remote-SSH: add-new-host」对话框中输入以下命令:
ssh rajamannar_k@compute.1363457738033948822 -o "ProxyCommand=gcloud compute start-iap-tunnel %h %p --listen-on-stdin --project=project-name --zone=us-central1-a" -i "C:\Users\rajamannar_k\.ssh\google_compute_engine"
输入完成后,VS Code会自动将配置写入~/.ssh/config,之后就能直接连接虚拟机。
三、验证配置
配置完成后,先在本地命令行测试连接是否正常:
# 如果用了自定义Host名 ssh gcp-private-vm # 或者直接用完整命令 ssh rajamannar_k@compute.1363457738033948822 -o "ProxyCommand=gcloud compute start-iap-tunnel %h %p --listen-on-stdin --project=project-name --zone=us-central1-a"
如果命令行能成功连接,VS Code的Remote-SSH就能正常使用。
内容的提问来源于stack exchange,提问作者mannar-senpai
相关产品推荐
相关产品推荐

