我很难将文件复制到我的Google计算引擎上。我在Google计算引擎上使用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].
7条答案
按热度按时间nimxete21#
在示例名称前插入
root@
:vuktfyat2#
这不起作用的原因是您的用户名在GCE VM示例上没有权限,因此无法写入
/var/www/html/
。请注意,由于此问题与Google计算引擎虚拟机有关,因此您不能以
root
的身份直接通过SSH访问虚拟机,也不能以root
的身份直接复制文件,原因与此相同:gcloud compute scp
使用scp
,而scp
依赖于ssh
进行身份验证。可能的解决方案:
1.(Faizan也在注解中建议)此解决方案每次都需要两个步骤
1.使用
gcloud compute scp --recurse
传输用户可以写入的文件/目录,例如/tmp
或/home/$USER
1.通过
gcloud compute ssh
或通过控制台上的 SSH 按钮登录GCE虚拟机,并使用sudo
进行复制以获得适当的权限:1.该解决方案是具有一些先前准备工作一个步骤:
1.一次性设置:直接给予您用户名对
/var/www/html
的写访问权限;这可以通过几种方式来实现;这里有一种方法:1.现在,您可以通过一个步骤运行复制:
zkure5ic3#
我使用bash脚本从本地机器复制到远程GCE机器上的可写目录;然后使用ssh移动文件。
您还需要设置GCE_USER和GCE_INSTANCE
在我的情况下,我不想改变目标目录,因为这会导致其他脚本的其他问题...
hsgswve44#
我遇到了同样的问题,使用其他答案中建议的方法也没有成功。最后成功的是在复制文件时明确发送我的“用户”,如官方的documentation所示。重要的部分是“USER@”
在我的情况下,我可以通过键入以下命令来传输文件:
但在我得到拒绝的许可后,我通过键入以下内容使其工作:
在我的例子中,用户名是我登录谷歌云时使用的用户名。
9lowa7mx5#
更新
gcloud compute copy-files
已过时。请改用:
更多信息:https://cloud.google.com/sdk/gcloud/reference/compute/scp
v09wglhw6#
此问题的更新解决方案(2020)
为了便于说明,我们将这个问题分为两部分。“copy-files” 命令已被正式废弃,我们将使用 “scp”,但新旧选项都仅限于某些文件夹。
由于我们确实可以访问***/tmp***文件夹,这意味着我们可以使用首选的 “scp” 命令轻松移动分发文件,这是一个临时步骤。
更重要的是,我们还可以通过SSH在示例上远程执行脚本或命令,这意味着访问受限不再是问题。
示例时间
第一部分是将dist文件夹及其所有内容递归复制到tmp文件夹(gloud给予访问该文件夹):
第二部分利用了我们可以通过ssh远程运行命令这一事实:
(or您可能需要执行的任何其他命令)
更重要的是,这还意味着我们可以使用sudo和 “cp” 复制函数将分发文件复制到最终目的地:
这完全消除了首先通过ssh终端设置权限的需要。
p8h8hvxi7#
这是从远程机器复制文件到你的机器。并确保你有ssh设置,因为这将使用默认的ssh键。这对我工作:
这是一个通用的语法,所以如果你想把文件从你的机器复制到远程机器,你可以使用这个语法。--recurse:需要复制包含其他文件的目录
语法:
gcloud compute scp 'SOURCE' 'DESTINATION'
注意:在没有超级用户的情况下运行