我已经在实例内部尝试了gsutil rsync/cp,它很有效。我正在寻找一种使用gcloud/gsutilcli从本地机器运行同步的方法。有没有像gcloudcompute-scp这样的命令可以从实例同步到bucket?[编辑]我查阅了官方文件,找不到这样的例子。
如果我知道你想在云之外的机器上运行一个命令,该命令将在云VM和bucket之间rsync文件,那么不,没有这样的命令,这在设计上是不可能的。想想看:虚拟机可以运行Linux、Windows,甚至是你自己开发的操作系统。(还记得那个Linus Torvalds的家伙吗?他曾经这样做只是为了好玩?这个。(这是GCE本身不可能支持的。出于同样的原因,即使从另一个虚拟机,而不仅仅是从您的本地计算机,这也是不可能的。
然而,只要您可以从本地机器ssh到实例,相同的gsutil rsync ...
在ssh连接上也可以正常工作:
ssh instance-1 'gsutil rsync ...'
只是不要错过或打乱报价。如果使用gcloud compute ssh
而不是仅使用ssh
登录实例,则会改为(请注意--
,它会告诉gcloud
应将其余参数传递给ssh
(。
gcloud compute ssh instance-1 -- 'gsutil rsync ...'
无论在哪里调用命令,gsutil
都能有效地在两个存储桶之间复制和rsyncs数据;数据永远不会离开云。这是可能的,因为桶是谷歌自己的装置,他们完全控制他们的API。但是,进入运行随机操作系统的工作虚拟机并读取/写入文件是完全不可能的。
此技术甚至适用于整个内联shell脚本。例如,这是我用来设置新实例的脚本的一部分(我生成了很多临时虚拟机,所以我想要一个解决方案,例如缺少bash完成包等(:
ssh "$target" '
set -eu
cd ~
if [[ -f .kkm-config-done ]]; then
echo "### STOP: .kkm-config-done exists, not overwriting files"
exit 1
. . . .
'
注意唯一的单引号,结束唯一的ssh
参数。
切向:在IAP隧道上读取,该隧道允许您通过ssh进入实例,而不会将侦听ssh端口暴露给整个互联网(hic-sunt-dracones:((。他们是自由的,非常安全。在一个琐碎的情况下,它就像在gcloud compute ssh
命令中添加--tunnel-through-iap
开关一样简单。指针在该开关的文档中。