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

我很难将文件复制到我的Google计算引擎。 我正在Google Compute Engine上使用Ubuntu服务器。

我是从我的OS Xterminal做到这一点,我已经使用gcloud授权。

 local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a Warning: Permanently added '<IP>' (RSA) to the list of known hosts. scp: /var/www/html/index.php: Permission denied ERROR: (gcloud.compute.copy-files) [/usr/bin/scp] exited with return code [1]. 

Solutions Collecting From Web of "`gcloud compute copy-files`:复制文件时拒绝权限"

在实例名称前插入root@

 local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php root@example-instance:/var/www/html --zone us-central1-a 

这不起作用的原因是您的用户名不具有GCE VM实例的权限,因此无法写入/var/www/html/

请注意 ,由于这个问题是关于Google Compute Engine虚拟机的,因此您不能以root身份直接将SSH直接连接到虚拟机,也不能以gcloud compute copy-files root身份直接复制文件,原因相同: gcloud compute copy-files使用依靠ssh进行身份验证的scp

可能的解决方案:

  1. (也由Faizan在评论中提出),这个解决方案每次都需要两步

    1. 使用gcloud compute copy-files来传输用户可以写入的文件/目录,例如/tmp/home/$USER

    2. 通过gcloud compute ssh或通过控制台上的SSH按钮登录到GCE VM,并使用sudo进行复制以获得适当的权限:

      # note: sample command; adjust paths appropriately

      sudo cp -r $HOME/html/* /var/www/html

  2. 这个解决方案是一些事先准备工作的一个步骤:

    1. 一次性设置:直接给你的用户名写入权限/var/www/html ; 这可以通过几种方式来完成; 这里有一个方法:

      # make the HTML directory owned by current user, recursively

      sudo chown -R $USER /var/www/html

    2. 现在你可以运行复制一步:

      gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a

我使用bash脚本从本地机器复制到远程GCE机器上的可写目录; 然后使用ssh移动文件。

 SRC="/cygdrive/d/mysourcedir" TEMP="~/incoming" DEST="/var/my-disk1/my/target/dir" 

您还需要设置GCE_USER和GCE_INSTANCE

 echo "=== Pushing data from $SRC to $DEST in two simple steps" echo "=== 1) Copy to a writable temp directoy in user home" gcloud compute copy-files "$SRC"/*.* "${GCE_USER}@${GCE_INSTANCE}:$TEMP" echo "=== 2) Move with 'sudo' to destination" gcloud compute ssh ${GCE_USER}@${GCE_INSTANCE} --command "sudo mv $TEMP/*.* $DEST" 

在我的情况下,我不想chown目标目录,因为这会导致与其他脚本的其他问题…

UPDATE

gcloud compute copy-files弃用

改用:

 $ gcloud compute scp example-instance:~/REMOTE-DIR ~/LOCAL-DIR \ --zone us-central1-a 

更多信息: https : //cloud.google.com/sdk/gcloud/reference/compute/scp