You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何以超级用户身份从Cloud Shell复制文件至虚拟机并解决权限报错

解决Google Cloud Shell向虚拟机受保护目录复制文件的权限问题

看起来你遇到了路径错误+权限不足的双重问题,才导致了Permission denied的报错。我来一步步帮你搞定:

1. 先修正远程路径的错误

你之前的命令里写的lampstack-vm:~/opt/bitnami/apache2/htdocs/file.php有个小问题:~/代表的是虚拟机普通用户的家目录,所以这个路径实际指向的是/home/你的用户名/opt/...,而不是系统根目录下的/opt/bitnami/...。正确的远程路径应该去掉~/,写成:lampstack-vm:/opt/bitnami/apache2/htdocs/file.php

2. 解决受保护目录的权限问题

/opt/bitnami/apache2/htdocs是系统级的受保护目录,普通用户没有直接写入的权限,必须借助sudo来完成操作。这里有两种常用方案:

方法一:先复制到家目录,再用sudo移动

这种方式更直观,适合新手操作:

  • 第一步:先把文件复制到虚拟机的普通用户家目录(这一步你已经成功过):
    gcloud compute scp --project "[MY PROJECT ID]" ~/file.php lampstack-vm:~/file.php
    
  • 第二步:登录到虚拟机:
    gcloud compute ssh --project "[MY PROJECT ID]" lampstack-vm
    
  • 第三步:用sudo把文件复制到目标目录,顺便调整权限确保Web服务能访问:
    sudo cp ~/file.php /opt/bitnami/apache2/htdocs/file.php
    # 可选:适配Bitnami环境的权限设置
    sudo chown bitnami:daemon /opt/bitnami/apache2/htdocs/file.php
    

方法二:直接通过SSH管道写入(一步到位)

如果不想分步骤操作,可以用gcloud compute ssh结合sudo tee直接把文件内容写入目标目录,省去中间复制到家目录的步骤:

gcloud compute ssh --project "[MY PROJECT ID]" lampstack-vm --command "sudo tee /opt/bitnami/apache2/htdocs/file.php > /dev/null" < ~/file.php

这里tee命令会以root权限写入文件,> /dev/null是为了避免在终端输出文件内容。

补充:为什么之前会报错?

你看到的Permission denied (publickey)其实可能是因为远程路径不存在(你写的~/opt在虚拟机里根本没有这个目录),加上后续的权限限制,才触发了连接断开的错误。修正路径+配合sudo就能彻底解决问题啦。

内容的提问来源于stack exchange,提问作者Alfredo Cely

火山引擎 最新活动