从GCP虚拟机复制文件到本地遇空文件及Cloud Shell下载失败问题
GCP虚拟机文件下载问题排查与解决
一、gcloud compute scp传输空文件的原因及解决
你用sudo gcloud compute scp的方式不对——这里的sudo是给本地的gcloud命令提权,而非让远程虚拟机以root权限读取文件。如果目标日志文件是root或特定用户专属权限(比如权限为-rw-------),你的登录用户没有读取权限,scp就会生成空文件。
解决方法二选一:
- 方法1:先在虚拟机内复制文件到可访问目录
先通过ssh将文件复制到当前用户的主目录并修改权限:
再执行scp:gcloud compute ssh orca-1 --command="sudo cp /opt/test.txt ~/test.txt && sudo chown $USER:$USER ~/test.txt"gcloud compute scp orca-1:~/test.txt . - 方法2:直接通过ssh隧道以root权限读取
用--ssh-flag传递提权参数,让远程端以root身份读取文件:gcloud compute scp --ssh-flag="-t" orca-1:/opt/test.txt . --command="sudo cat /opt/test.txt"
二、Cloud Shell Download按钮提示“No such file”的问题
Cloud Shell的Download按钮仅能访问Cloud Shell自身实例的文件系统,不是GCP虚拟机的文件系统。你之前用cat /path能看到内容,说明这个/path是Cloud Shell实例里的路径,而非远程虚拟机的。
解决步骤:
- 先把GCP虚拟机的文件复制到Cloud Shell实例中(参考上面的scp命令);
- 在Cloud Shell的文件浏览器中找到复制过来的文件,再用Download按钮下载。
三、权限问题验证
登录GCP虚拟机,执行以下命令查看文件权限:
ls -l /opt/test.txt
如果输出中权限列是-rw-------(只有文件所有者可读),那就是权限导致的无法读取,上面的方法都能解决。注意不要随意修改系统日志文件的原始权限,避免影响后续日志采集或服务运行。
内容的提问来源于stack exchange,提问作者Spencer Woo
相关产品推荐
相关产品推荐

