为什么我无法访问Google Compute Engine虚拟机? [英] Why am I Unable to Access a Google Compute Engine VM?

查看:32
本文介绍了为什么我无法访问Google Compute Engine虚拟机?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法使用Google Cloud SDK(gcloud)访问Google Compute Engine(GCE)虚拟机($GCE_INSTANCE_NAME):

gcloud compute 
--project=$GCP_PROJECT_ID 
ssh 
--zone=$GCE_INSTANCE_ZONE 
$GCE_INSTANCE_NAME

#=>

Permission denied (publickey).
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

我已尝试:

  1. 吊销SSH密钥:

    gcloud auth revoke --all
    
  2. gcloud auth login
    
  3. 要再次访问$GCE_INSTANCE_NAME,请使用以下命令:

    gcloud compute 
    --project=$GCP_PROJECT_ID 
    ssh 
    --zone=$GCE_INSTANCE_ZONE 
    $GCE_INSTANCE_NAME
    
    #=>
    
    ERROR: (gcloud.compute.ssh) Could not fetch resource:
     - Required 'compute.instances.get' permission for 'projects
    
    

要成功地ssh进入$GCE_INSTANCE_NAME,我可以执行哪些步骤?

推荐答案

权限被拒绝(Public Key)。错误:(gcloud.computer te.ssh)[/usr/bin/ssh]已退出,返回代码为[255]。

此错误似乎指的是SSH密钥的某些错误或Linux来宾环境不完整。

我想知道运行gcloud auth revoke --all

的目的是什么

您能提供以下命令的输出吗?

  1. $ gcloud compute instances describe name-of-your-instance --zone
    zone-the-instance-is-in --project name-of-your-project
  2. $ gcloud compute instances get-serial-port-output name-of-your-instance --zone zone-the-instance-is-in --project name-of-your-project
  3. $ gcloud compute firewall-rules list --project name-of-your-project

这些命令可能很有帮助,因为:

  1. 使用此命令,我们可以检查ssh密钥的状态 实例和实例中启用的作用域(以及 其他信息)
  2. 此命令提供实例中的serial output log entries可以帮助解决您遇到的连接问题。请注意,此日志在实例重启后会被擦除,因此不要期望这里有持久日志,但此信息可能对您的情况有用。
  3. 此命令在您的项目中输出firewall rules;如果没有,则应该有允许端口22上的TCP入站通信的默认或经过管理的防火墙规则(您需要创建一个)。

您是否尝试过匿名模式下的to SSH from the browser? 有时,浏览器扩展可能会阻止SSH在浏览器功能上正常运行,这就是我推荐匿名模式的原因。


编辑 为了使这篇帖子对社区有用(并且更容易阅读),我在这里总结了下面的一些评论:

显示的错误:

无法获取资源:-必需的‘Compute.instances.get’项目的权限//区域//实例/

操作:检查用户角色/权限

$ gcloud beta iam roles list --account your-account-here

> --- description: Full management of App Engine apps (but not storage).
> etag: AA== name: roles/appengine.appAdmin stage: GA title: App Engine Admin
> --- description: Ability to view App Engine app status. etag: AA== name: roles/appengine.appViewer stage: GA title: App Engine Viewer

根据上面的输出:用户只有App Engine权限(没有Compute Engine中的权限)

操作:要求项目所有者添加一个角色,授予用户访问GCE实例的权限(实例管理员角色、计算管理员角色) 此处可用角色列表:cloud.google.com/compute/docs/access/iam#instance_admin_role

需要信息,请运行2个命令:

  • 为了查看实例中的日志

    $gcloud计算实例获取串行端口输出实例名称区域实例在项目中项目名称

    SeaBIOS(版本1.8.2-20180102_145157-GOOGLE)内存总大小=0x000000006cc00000=找到1740MiB CPU:1支持的最大CPU数: 256在0:3找到virtio-scsi virtio-scsi供应商=‘google’product=‘PersistentDisk’rev=‘1’type=0 Removable=0 Virtio-SCSI块大小=512个扇区=20971520=10240 MiB驱动器0x000f2330:pchs=0/0/0转换=LBA LCHS=1024255/63s=20971520 正在从硬盘0启动.[0.000000][font=宋体] 正在初始化cgroup Subsys cpuset[0.000000] 正在初始化cgroup子系统CPU[0.000000] 正在初始化cgroup子系统cpuacct[0.000000] Linux版本3.16.0-0.bpo.4-amd

  • 确认存在允许端口22上的入站通信的防火墙规则

    $gCloud计算防火墙-规则列表--项目名称 名称网络方向优先级允许 DEFAULT-ALLOW-SSH默认入口65534 tcp:22

    /li>

从上面的输出中,允许SSH通信的防火墙规则的优先级为65534。 优先级是一个从0到65535的整数,两者都包括在内。 较低的优先级值表示较高的优先级。 换句话说,1比2优先级高。 有关详细说明,请阅读this document

更新防火墙规则以设置更高的优先级。 为此,请运行命令:

$ gcloud compute firewall-rules update --priority 1000 default-allow-ssh

问题:我尝试通过SSH连接到实例,但仍然收到相同的旧错误:SSH:连接到主机X.XX.XX.XX端口22:操作超时错误:(gcloud.computer te.ssh)[/usr/bin/ssh]退出,返回代码为[255]

检查ssh服务是否在实例中运行。 运行以下命令获取实例IP:

$ gcloud compute instances describe [NAME_OF_YOUR_INSTANCE] --format='get(networkInterfaces[0].accessConfigs[0].natIP)' 

安装Netcat=>是用于读取/写入网络连接的计算机网络实用程序:

$ sudo apt-get install netcat

运行以下命令以检查该命令的输出:

$ nc [EXTERNAL_IP] 22 
> 

问题:运行NC[EXTERNAL_IP]22未返回任何信息

检查您的实例中是否启用了Linux来宾环境。 为此,您应该在GCE实例上添加启动脚本。 要将启动脚本添加到实例,请执行以下操作:

  1. 单击实例名称
  2. 单击编辑
  3. 转到"自定义元数据"部分
  4. 在"key"文本字段中添加:start-script
  5. 在"Value"文本字段中添加:#! /bin/bash sudo systemctl list-unit-files | grep google | grep enabled
  6. 保存更改

More detailed info on startup scripts也可用。

然后重新启动实例,以便允许执行脚本。 验证Linux来宾环境脚本是否已安装并正在运行。 为此,请检查来自GCE实例的串行日志控制台中启动脚本的输出。 您可以勾选the expected outputs for the different Operating Systems

如果未安装Linux来宾环境,请重新安装。 您可以按照this documentation安装LGE。

这篇关于为什么我无法访问Google Compute Engine虚拟机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆