【问题标题】:停止和启动 vm 实例后 GCP 的 SSH 终端不工作
【发布时间】:2020-10-30 23:25:15
【问题描述】:

我正在使用 gcp vm 机器实例 N1-standard 8V-30GB 和 N1-standard 4V-15GB

  • 操作系统-Debian
  • 版本 - Debian GNU/Linux 10(buster)

我在过去 1 个月面临的这个问题。 公共访问权限被拒绝是我在尝试从云外壳访问时看到的消息之一 我之前跑过command chmod 777 <home directory>

【问题讨论】:

  • 文件是什么?您如何尝试通过 Cloud Shell 访问文件?你用什么命令?
  • gcp 文档中的这个命令 > gcloud compute instances start example-instance --zone=us-central1-a
  • 好的,现在你的虚拟机已经启动了。然后你使用哪个命令登录虚拟机?
  • 我通常这样做 步骤 1- GCP 2-计算引擎 3-VM 实例 4-如果 vm 正在运行,那么我将单击 SSH 的下拉菜单并选择打开在浏览器窗口中。将弹出窗口并尝试连接但无法建立连接。
  • 您是只更改了主目录的权限,还是递归地运行了此命令?如果递归,您已经破坏了~/.ssh 文件夹的安全性,您将无法登录。将磁盘挂载到另一个实例上进行修复。您还可以拍摄快照,挂载到另一个实例上,进行修复,然后从修复的磁盘创建一个新实例。

标签: google-cloud-platform google-compute-engine spring-cloud-gcp


【解决方案1】:

我已尝试重现您的步骤并能够解决此问题。

请看下面我的步骤:

  1. create 虚拟机实例:
gcloud compute instances create instance-1 --zone=europe-west3-a --machine-type=e2-medium --image=ubuntu-1804-bionic-v20200701 --image-project=ubuntu-os-cloud
gcloud compute instances create instance-2 --zone=europe-west3-a --machine-type=e2-medium --image=ubuntu-1804-bionic-v20200701 --image-project=ubuntu-os-cloud
  1. change 递归访问 VM 实例 instance-1 上我的主目录的权限:
instance-1:~$ chmod -R 777 ~
instance-1:~$ ls -la
...
drwxrwxrwx 2 username username 4096 Jul 15 07:50 .ssh 
  1. createVM 实例快照instance-1 启动盘:
gcloud compute disks snapshot instance-1 --snapshot-names instance-1-snapshot --zone=europe-west3-a
  1. create 带有快照的新磁盘:
gcloud compute disks create instance-1-snapshot-disk --zone=europe-west3-a --source-snapshot=instance-1-snapshot
  1. attach创建磁盘instance-1-snapshot-disk到VM实例instance-2
instance-2:~$ ls -l /dev/ | grep sd
brw-rw---- 1 root disk      8,     0 Jul 15 07:39 sda
brw-rw---- 1 root disk      8,     1 Jul 15 07:39 sda1
brw-rw---- 1 root disk      8,    14 Jul 15 07:39 sda14
brw-rw---- 1 root disk      8,    15 Jul 15 07:39 sda15
instance-2:~$ mount | grep sda
/dev/sda1 on / type ext4 (rw,relatime)
/dev/sda15 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

然后

gcloud compute instances attach-disk instance-2 --disk=instance-1-snapshot-disk --zone=europe-west3-a

之后

instance-2:~$ ls -l /dev/ | grep sd
brw-rw---- 1 root disk      8,     0 Jul 15 07:39 sda
brw-rw---- 1 root disk      8,     1 Jul 15 07:39 sda1
brw-rw---- 1 root disk      8,    14 Jul 15 07:39 sda14
brw-rw---- 1 root disk      8,    15 Jul 15 07:39 sda15
brw-rw---- 1 root disk      8,    16 Jul 15 08:04 sdb
brw-rw---- 1 root disk      8,    17 Jul 15 08:04 sdb1
brw-rw---- 1 root disk      8,    30 Jul 15 08:04 sdb14
brw-rw---- 1 root disk      8,    31 Jul 15 08:04 sdb15
instance-2:~$ sudo mkdir /mnt/instance-1-snapshot-disk
instance-2:~$ sudo mount /dev/sdb1 /mnt/instance-1-snapshot-disk
instance-2:~$ ls -la /mnt/instance-1-snapshot-disk
total 104
drwxr-xr-x 23 root root  4096 Jul 15 07:56 .
drwxr-xr-x  3 root root  4096 Jul 15 08:05 ..
drwxr-xr-x  2 root root  4096 Jul  1 19:14 bin
drwxr-xr-x  4 root root  4096 Jul  1 19:19 boot
drwxr-xr-x  4 root root  4096 Jul  1 19:11 dev
drwxr-xr-x 93 root root  4096 Jul 15 07:55 etc
drwxr-xr-x  4 root root  4096 Jul 15 07:50 home
lrwxrwxrwx  1 root root    30 Jul  1 19:18 initrd.img -> boot/initrd.img-5.3.0-1030-gcp
lrwxrwxrwx  1 root root    30 Jul  1 19:18 initrd.img.old -> boot/initrd.img-5.3.0-1030-gcp
drwxr-xr-x 22 root root  4096 Jul  1 19:17 lib
drwxr-xr-x  2 root root  4096 Jul  1 19:01 lib64
drwx------  2 root root 16384 Jul  1 19:13 lost+found
drwxr-xr-x  2 root root  4096 Jul  1 19:01 media
drwxr-xr-x  2 root root  4096 Jul  1 19:01 mnt
drwxr-xr-x  2 root root  4096 Jul  1 19:01 opt
drwxr-xr-x  2 root root  4096 Apr 24  2018 proc
drwx------  3 root root  4096 Jul 15 07:36 root
drwxr-xr-x  4 root root  4096 Jul  1 19:19 run
drwxr-xr-x  2 root root  4096 Jul  1 19:17 sbin
drwxr-xr-x  6 root root  4096 Jul 15 07:36 snap
drwxr-xr-x  2 root root  4096 Jul  1 19:01 srv
drwxr-xr-x  2 root root  4096 Apr 24  2018 sys
drwxrwxrwt  7 root root  4096 Jul 15 07:56 tmp
drwxr-xr-x 10 root root  4096 Jul  1 19:01 usr
drwxr-xr-x 13 root root  4096 Jul  1 19:12 var
lrwxrwxrwx  1 root root    27 Jul  1 19:18 vmlinuz -> boot/vmlinuz-5.3.0-1030-gcp
lrwxrwxrwx  1 root root    27 Jul  1 19:18 vmlinuz.old -> boot/vmlinuz-5.3.0-1030-gcp
  1. 更改权限:
    • .ssh 目录:700 drwx------
    • 公钥(.pub文件):644-rw-r--r--
    • 私钥(id_rsa):600 -rw-------
    • 最后你的主目录不应该被组或其他人写:755 drwxr-xr-x
instance-2:~$ chmod -R 755 /mnt/instance-1-snapshot-disk/home/username/
instance-2:~$ chmod -R 700 /mnt/instance-1-snapshot-disk/home/username/.ssh/
instance-2:~$ chmod 644 /mnt/instance-1-snapshot-disk/home/username/.ssh/authorized_keys

完成后卸载磁盘:

instance-2:~$ sudo umount /mnt/instance-1-snapshot-disk/
  1. 来自VM实例instance-2detach磁盘instance-1-snapshot-disk
gcloud compute instances detach-disk instance-2 --disk=instance-1-snapshot-disk --zone=europe-west3-a
  1. create 修复磁盘中的新实例:
gcloud compute instances create instance-3 --zone=europe-west3-a --machine-type=e2-medium --disk=name=instance-1-snapshot-disk
  1. 检查与 VM 实例 instance-1 的 SSH 连接。

此外,请查看文档Troubleshooting SSH 部分Inspect the VM instance without shutting it down 以了解更多详细信息。

【讨论】:

  • 感谢您的努力。我遵循所有步骤,所有步骤都正确运行。现在,在此之后我重新启动了 instance-1,但是我无法再次连接 instance-1 的 SSH。包括项目所有者在内的所有其他用户都会发生同样的事情。我已经在下面发布了 que 以附上屏幕截图。
  • 您使用云 IAP 吗?您是否尝试通过 Web 控制台连接?您的实例是否有外部 IP?
  • 是的,我正在使用 Cloud IAP,并且实例具有外部 IP。我从未尝试通过 Web 控制台连接。但我尝试使用 cloud shell 进行连接。
  • 是否可以更改临时防火墙规则并使用命令gcoud compute ssh 连接到实例而不使用标志--tunnel-through-iap
  • 在不更改防火墙规则的情况下,我在云 shell 上尝试了 gcloud compute ssh instance --zone=us-central1-a,我可以访问我的主目录,所有你的建议的步骤在这里非常有效,可以从云外壳访问。非常感谢您的时间和耐心!! ssh 窗口仍然没有运气,如果您有更多解决方案,请建议我,我也会尝试。
【解决方案2】:

我试图从所有者的帐户访问实例 1,但所有者也无法连接到实例 1。

项目所有者在 ssh 窗口中弹出此窗口 [1]:https://i.stack.imgur.com/y2fzC.jpg

我观察到,在新创建的实例中,如果我添加一些文件,如 git clone repo,之后如果我重新启动它,我就可以再次连接 SSH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多