【问题标题】:Copy files between two Google Cloud instances在两个 Google Cloud 实例之间复制文件
【发布时间】:2014-12-01 19:04:32
【问题描述】:

我在 Google Cloud 中有两个项目,我需要将文件从一个项目中的实例复制到另一个项目中的实例。我尝试使用“gcloud compute copy-files”命令,但出现此错误:

gcloud compute copy-files test.tgz --project stack-complete-343 instance-IP:/home/ubuntu --zone us-central1-a 

ERROR: (gcloud.compute.copy-files) Could not fetch instance: - Insufficient Permission

【问题讨论】:

    标签: google-cloud-platform


    【解决方案1】:

    我能够使用全新的 VM 实例复制您的问题,但遇到了同样的错误。为了解决这个问题,我采取了以下几个步骤:

    确保您已通过身份验证并有权使用同一帐户访问两个项目!

    $ gcloud config list(如果您看到服务帐户@developer.gserviceaccount.com,则需要切换到在两个项目上都启用的帐户。您可以从开发人员控制台>权限中进行检查)

    $gcloud auth login(复制链接到新窗口,登录,复制代码粘贴回提示符中)

    $ gcloud compute scp test.tgz --project stack-complete-343 instance-IP:/home/ubuntu --zone us-central1-a(我也会使用实例名称而不是 IP)

    最后一个命令也应该生成你的 ssh 密钥。您应该会看到类似这样的内容,但不必担心输入密码:

    警告:将执行 [/usr/bin/ssh-keygen] 以生成密钥。

    生成公钥/私钥 rsa 密钥对

    输入密码(无密码为空):

    【讨论】:

    • gcloud compute copy-files 已弃用并由 cloud compute scp 取代
    【解决方案2】:

    转到远程实例上的权限选项卡(即您不会在gcloud compute copy-files 上运行的实例)。然后转到服务帐户并创建一个新帐户,为其命名并选中复选框以获取它的密钥文件并保持JSON 处于选中状态。使用gcloud compute copy-files 和您的个人帐户将该密钥文件从您的个人计算机上传到本地实例(即您正在通过SSH 连接并在其上运行gcloud compute copy-files 命令的计算机。)然后通过SSH 从本地实例运行它。 gcloud auth activate-service-account ACCOUNT --key-file KEY-FILEACCOUNT 替换为生成的电子邮件地址,将 KEY-FILE 替换为您之前从个人计算机上载的密钥文件的路径。然后您应该能够访问设置帐户的实例。必须在要在其间复制文件的每个实例上重复这些步骤。如果这些说明不清楚,请告诉我,我会尽力提供帮助。

    【讨论】:

      【解决方案3】:

      不建议在 Compute Engine 实例上对您的帐户进行身份验证,因为这可能会将您的凭据暴露给有权访问该计算机的任何人。

      相反,您可以让您的服务帐号使用 Compute Engine API。首先,停止实例。停止后,您可以从控制台编辑 Cloud API 访问范围。将 Compute Engine 范围从 Disabled 修改为 Read Only

      您现在应该可以只使用copy-files 命令了。这让您的服务帐号可以访问 Compute Engine API。

      【讨论】:

      • 您所说的“将计算引擎范围从禁用修改为只读”的部分。...对于源虚拟机来说,目标虚拟机呢,我相信它也需要修改它的权限,你会吗?同意 ?我一会儿去试试
      • 我不这么认为,假设它具有相同的服务帐户应该没问题。进展如何?
      • 我尝试通过仅向源提供对所有云 API 的完全访问权限但没有成功...没有机会在目标上更改此设置,但考虑一下...云 api 需要对目标进行写访问,对吗?如果不是,它还能如何在目标机器上“写入”?
      • 你遇到了什么错误,你对项目有什么权限?这假设您在源机器和目标机器上都有相同的服务帐户。这个想法是服务帐户已经拥有目标机器上的权限。您所要做的就是让它访问 Compute Engine API。您可能还需要为自己授予服务帐户参与者权限。
      【解决方案4】:

      最简单的方法是使用“scp”命令和 .pem 文件。举个例子

      sudo scp -r -i your/path_to/.pem your_username@ip_address_of_instance:path/to/copy/file
      

      【讨论】:

        【解决方案5】:

        如果他们都在同一个项目中,这是最简单的方法

        gcloud compute copy-files yourFileName --project yourProjectName instance-name:~/folderInInstance --zone europe-west1-b
        

        显然,您应该根据您的实例编辑区域。

        【讨论】:

          【解决方案6】:

          获取权限的方法之一是启用Cloud API access scopes。您可以将它们设置为Allow full access to all Cloud APIs

          console 中单击instance 并使用上面的EDIT 按钮。滚动到底部并更改Cloud API access scopes。另请参阅answer

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-02-02
            • 1970-01-01
            • 1970-01-01
            • 2021-01-08
            • 1970-01-01
            • 2021-04-21
            • 2015-07-27
            • 2010-10-15
            相关资源
            最近更新 更多