You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用gcloud在两台VM之间传输文件并解决scp命令报错问题

解决方案:GCE实例间无需本地中转的gcloud文件传输方案

报错原因:gcloud compute scp原生不支持直接在两个远程GCE实例之间传输文件,仅允许源为本地文件、目标为远程实例,或源为远程实例、目标为本地路径的传输模式,因此传入两个远程路径会触发对应报错。

以下是3种无需本地磁盘中转、基于gcloud原生工具的可行方案:

  • 方案1:本地管道中转(无本地磁盘占用)
    直接通过本地内存管道串联两个实例的SSH流,数据不会写入本地磁盘,适合绝大多数大文件传输场景,无需对实例做额外配置:

    gcloud compute ssh github-action-runner-0001 --command "cat /tmp/images.tar" | gcloud compute ssh github-action-runner-0002 --command "cat > /tmp/images.tar"
    

    如果需要压缩传输减少带宽占用,可以加压缩指令:

    gcloud compute ssh github-action-runner-0001 --command "tar -zcf - /tmp/images.tar" | gcloud compute ssh github-action-runner-0002 --command "tar -zxf - -C /tmp"
    
  • 方案2:实例内网直接传输(速度最快)
    如果两个实例在同一个VPC下、内网互通,可以直接登录源实例后在内部执行gcloud scp命令,走内网链路速度更快且无公网流量费用:

    1. 登录源实例:
    gcloud compute ssh github-action-runner-0001
    
    1. 在源实例终端内执行传输命令:
    gcloud compute scp /tmp/images.tar github-action-runner-0002:/tmp/images.tar
    

    注意需要确保源实例绑定的服务账号拥有GCE相关操作权限,默认GCE服务账号一般已包含所需权限。

  • 方案3:Cloud Storage中转(稳定性最高)
    针对TB级超大文件、对传输稳定性要求高的场景,可以用Cloud Storage作为中间存储,支持断点续传,传输中断后无需重传整个文件:

    1. 将源实例文件上传至你提前创建好的Cloud Storage存储桶:
    gcloud compute ssh github-action-runner-0001 --command "gcloud storage cp /tmp/images.tar gs://<你的存储桶名称>/images.tar"
    
    1. 将存储桶内的文件下载到目标实例:
    gcloud compute ssh github-action-runner-0002 --command "gcloud storage cp gs://<你的存储桶名称>/images.tar /tmp/images.tar"
    

    传输完成后如果不需要保留备份,可以删除存储桶内的文件:

    gcloud storage rm gs://<你的存储桶名称>/images.tar
    

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:06:02