本地与实例间数据传输
约 838 字大约 3 分钟
2026-08-29
把本地文件上传到服务器、或从服务器下载备份到本地,最常用的是 scp 与 rsync 两个命令行工具(基于 SSH,安全加密)。Windows 用户也可直接使用图形化的 WinSCP。
传输方式怎么选
| 方式 | 适合场景 | 说明 |
|---|---|---|
| scp / rsync | 命令行、脚本化、大目录增量同步 | 本文主角,基于 SSH 加密 |
| WinSCP(图形) | Windows 用户日常上传下载 | 拖拽操作,支持密钥登录 |
| MSTSC 驱动器映射 | 远程桌面时临时传文件 | 见连接 Windows 服务器的"本地磁盘映射"节 |
| SFTP | 替代 FTP 的加密传输 | WinSCP / FileZilla 均支持,走 SSH 22 端口 |
| FTP 站点 | 长期对外提供下载/收集 | 明文协议需谨慎,见搭建FTP站点 |
scp:简单直接
本地与实例之间复制文件,语法类似 cp,但目标/源可以是 用户@IP:路径:
# 上传:本地网站代码 → 实例
scp -r ./mywebsite root@<实例IP>:/var/www/
# 下载:实例上的备份 → 本地当前目录
scp root@<实例IP>:/backup/db_20260829.sql.gz .
# 修改过 SSH 端口的,用大写 -P 指定
scp -P 2222 app.jar root@<实例IP>:/opt/myapp/注
-r 复制目录;scp 的端口参数是大写 -P(ssh 是小写 -p,容易混)。
rsync:增量同步(推荐大文件/目录)
rsync 只传输差异部分,中断后可续传,适合备份与目录同步:
# 上传目录(-a 保留属性,-v 显示过程,-z 压缩,--progress 显示进度)
rsync -avz --progress ./mywebsite/ root@<实例IP>:/var/www/mywebsite/
# 下载实例备份到本地
rsync -avz root@<实例IP>:/backup/ ./backup/
# 排除某些文件
rsync -avz --exclude 'node_modules' --exclude '.git' ./mywebsite/ root@<实例IP>:/var/www/mywebsite/
# 非 22 端口
rsync -avz -e 'ssh -p 2222' ./data/ root@<实例IP>:/data/末尾斜杠的区别
src/ 表示同步目录内容,src(不带斜杠)会把 src 目录本身复制过去。这是 rsync 最容易踩的坑。
实例之间互传
两台实例互相传输同理,在目标实例能 SSH 到源实例的前提下,在目标实例上执行:
rsync -avz root@<源实例IP>:/data/app/ /data/app/Windows 用户:WinSCP 图形工具
本地为 Windows 时,两种方式任选:
- WinSCP(图形化,推荐新手):填写 IP、端口、用户名、密码或密钥,支持拖拽上传下载、目录同步。
- 命令行:Windows 10/11 自带 OpenSSH,
scp/rsync(rsync 需额外安装)用法与上文一致。
关于 FTP
FTP 也是一种传输方式(Windows 搭建见搭建FTP站点),但明文传输且需额外部署;个人维护场景下 scp/rsync 更安全省事。
常见问题
Permission denied (publickey)?
实例只允许密钥登录:-i 指定私钥(如 scp -i ~/.ssh/id_ed25519 ...),或先按SSH密钥对免密登录配置好密钥。
传到一半断了怎么办?
rsync 重新执行同一条命令即可续传;scp 只能重传。大文件同步请优先 rsync。
rsync 提示 command not found(实例端)?
部分最小化镜像未安装:sudo apt install rsync -y 或 sudo dnf install rsync -y。
传输速度只有几百 KB?
先确认实例带宽规格(见带宽计费模式),再排除本地网络问题;跨境线路波动属正常现象,可错峰传输或分段同步。
