问题描述
我很难将文件复制到我的Google Compute Engine中。我在Google Compute Engine上使用Ubuntu服务器。
我正在从OS X终端执行此操作,并且已经使用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].
最佳办法
在实例名称之前插入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 VM的,因此您不能以root
的形式直接通过SSH到VM,也不能以root
的形式直接复制文件,原因相同:gcloud compute copy-files
使用依赖ssh
的scp
进行身份验证。
可能的解决方案:
-
(也由Faizan在注释中建议)此解决方案每次都需要两个步骤
-
使用
gcloud compute copy-files
传输用户可以在其中写入的文件/目录,例如/tmp
或/home/$USER
-
通过
gcloud compute ssh
或通过控制台上的SSH按钮登录到GCE VM,并使用sudo
复制以获得适当的权限:# note: sample command; adjust paths appropriately
sudo cp -r $HOME/html/* /var/www/html
-
-
该解决方案是一些准备工作的第一步:
-
one-time设置:直接给您的用户名对
/var/www/html
的写权限;这可以通过几种方式完成;这是一种方法:# make the HTML directory owned by current user, recursively
sudo chown -R $USER /var/www/html
-
现在您可以在一个步骤中运行副本:
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"
就我而言,我不想对目标目录进行穿刺处理,因为这会导致其他脚本出现其他问题……