通过 gcloud compute scp 成功上传后在主目录中找不到文件

Posted

技术标签:

【中文标题】通过 gcloud compute scp 成功上传后在主目录中找不到文件【英文标题】:cannot find file on home directory after successfully uploading via gcloud compute scp 【发布时间】:2019-03-08 03:07:33 【问题描述】:

我尝试将一个名为 kaldi.sh 的文件上传到谷歌云虚拟机。

所以我按照https://cloud.google.com/compute/docs/gcloud-compute/ 的指导尝试了gcloud compute scp kaldi.sh vandys-0:~/experiment。更加具体: kaldi.sh 是我要上传的文件,vandys-0 是我的实例名称,experiment 是我要上传到的目录。

代码运行良好,但是当我激活 google cloud vm shell 并进入路径为 ~/experiemnt 的目录时(我相信与 /home/[username]/experiment 相同?)。我在实验目录中的ls 中一无所获。

我尝试在命令中使用gcloud compute scp kaldi.sh [username]@vandys-0:~/experiment。但它因错误而失败:

[用户名]@35.196.87.176:权限被拒绝(公钥)。

连接中断

任何想法都会有所帮助。

【问题讨论】:

您要复制的文件位于您要复制到的user 下。在这种情况下,它是vandys-0。首先切换到vandys-0 用户,然后执行ls 【参考方案1】:

计算引擎的 VM 实例不同于用于运行云 VM shell 的虚拟机。当您启动云 VM shell 时,它会生成自己的(唯一)虚拟机实例。 shell 的目的只是提供一个环境,您可以在其中运行 gcloud(或类似的)管理命令。我认为发生的事情是您将文件上传到您的真实计算引擎实例,然后打开云外壳,这将导致为您生成一个分离的(不相关的)实例。这些不会共享文件系统数据,因此您的文件似乎丢失了。

要访问将文件复制到的 VM 实例,我们可以使用控制台浏览器中的 SSH 窗口。 SSH 窗口可以从 VM Instances 页面上的 GCP 控制台打开。

【讨论】:

嗨@Kolban,我现在明白了。但问题是,如果我无法通过 shell 找到上传的本地文件,我该如何使用它? 你好,我们现在进入了一个新的谜题。让我们假设您已经创建了一个名为 MYBUCKET 的云存储桶,并且您的磁盘上有一个名为 myshell.sh 的源文件。如果您希望将其复制到 Cloud Shell,则将 shell 脚本文件复制到存储桶,然后在云 shell 中,从存储桶复制源代码。 $ gsutil cp myshell.sh gs://MYBUCKET 和 VM shell 上:$ gsutil cp gs:://MYBUCKET/myshell.sh . 你的意思是我们必须使用桶来转移?那我就一头雾水了,gcloud compute scp不能上传文件到shell有什么用? 在 GCP 中,您可以创建任意数量的 VM 实例……每个实例都是通过“计算引擎”创建的。当您使用 gcloud compute scp 时,您将命名您之前创建的 VM 实例之一。当您使用控制台云外壳时,它会创建一个额外的虚拟机,专门用于快速输入虚拟机任何特定实例外部的命令。 谢谢@Kolban。我完全理解外壳创建了另一个虚拟机。但正如你所说,gcloud compute scp 确实向我的目标实例发送了一些东西。我只想知道如何访问这些文件(上传到我创建的实例)?

以上是关于通过 gcloud compute scp 成功上传后在主目录中找不到文件的主要内容,如果未能解决你的问题,请参考以下文章

Gcloud Compute - 虚拟机不断终止

ERROR.(gcloud.compute.instance-groups.managed.rolling-action.replace)无法获取资源。(gcloud.compute.instance

ERROR.(gcloud.compute.instance-groups.managed.rolling-action.replace)无法获取资源。(gcloud.compute.instance

`gcloud compute copy-files`:复制文件时权限被拒绝

gcloud compute 远程执行命令

错误:(gcloud.compute.ssh)无法获取资源:-权限不足