问题描述
我正在尝试将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