如何将 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-PROJECT
。 config-ssh
中的详细信息
也可以使用 gcloud beta compute start-iap-tunnel INSTANCE_NAME 22 --listen-on-stdin
隧道 ssh 访问。 (即使没有 public ip)
您的 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 功能。
我正在尝试将 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-PROJECT
。 config-ssh
也可以使用 gcloud beta compute start-iap-tunnel INSTANCE_NAME 22 --listen-on-stdin
隧道 ssh 访问。 (即使没有 public ip)
您的 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 功能。