从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
答案 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交互。