从vm

时间:2019-06-30 19:45:37

标签: google-cloud-platform google-compute-engine gcloud google-cloud-shell

从Google Cloud Platform打开命令终端时,您会看到一个项目级shell

account_name@cloudshell:/ (project_name)$

启动新的VM后,可以像这样将文件从项目级文件系统发送到VM:

account_name@cloudshell:/ (project_name)$ gcloud compute scp --recurse \
> ~/project-file vm-name:~

插入新VM后,如何从VM内部执行相同的文件传输?

我尝试过的一切最终看起来都像这样:

account_name@vm-name:~$ gcloud compute scp --recurse \
> cloudshell:~/project-file ~
ERROR: (gcloud.compute.scp) Could not fetch resource:
 - The resource 'projects/project_name/zones/my_zone/instances/cloudshell' was not found

1 个答案:

答案 0 :(得分:2)

gcloud compute scp命令不支持将Google Cloud Shell作为源/目标。

Google最近向gcloud的“ alpha”版本中添加了支持Cloud Shell的新命令。

gcloud alpha cloud-shell scp cloudshell:~/REMOTE-DIR localhost:~/LOCAL-DIR

在VM实例内部使用此命令的问题是VM使用服务帐户凭据。 Cloud Shell是根据每个用户的凭据分配/创建的。每个用户ID都有一个不同的Cloud Shell实例-动态创建的。使用服务帐户,您无法向Cloud Shell标识要与之交互的实例。这意味着将创建一个未映射到用户身份的新Cloud Shell实例。

注意:看起来该API将来可能会支持此功能,但是当前的实现没有指定用户名或OAuth凭据的方法。

您需要使用用户凭据(OAuth 2.0)与Cloud Shell通信。除非您有GUI桌面可以在VM实例中运行Web浏览器,否则您将无法创建适合Google Cloud Shell身份验证的用户凭据。

您可以限制自己使用Cloud Shell实例中的命令向VM实例中复制文件,也可以查看我刚刚发布的实现Cloud Shell CLI的程序。如果选择第二种方法,请从您的桌面向Cloud Shell进行身份验证,然后将带有我的程序的user_credentials.json文件复制到您的VM实例。然后,您就有了一个相当强大的命令行工具,可用于Cloud Shell交互。

Google Cloud Shell CLI