Windows 通过 SSH 下载服务器目录并完整上传到指定服务器目录(scp / rsync 实战教程)

场景:

需要把 服务器上的目录下载到 Windows 本地 ,确认无误后,再完整上传到另一台服务器的指定目录 。

常见于:数据迁移、备份恢复等场景。


一、整体流程说明(先看这个很重要)

完整流程如下:

复制代码
服务器 A
   ↓(SSH)
Windows 本地
   ↓(SSH)
服务器 B(目标目录)

对应步骤:

  1. 服务器 A → Windows:下载目录
  2. Windows:确认文件完整
  3. Windows → 服务器 B:上传到指定目录
  4. 服务器 B:校验目录 & 修正权限

二、环境准备

Windows 端

  • Windows 10 / 11(自带 OpenSSH)
  • 或安装 Git Bash / WSL(推荐 rsync)

服务器端

  • SSH 可连接
  • 有写入目标目录的权限
  • (rsync 方案)服务器已安装 rsync

三、服务器目录下载到 Windows

✅ 方案一:scp(最简单,适合一次性)

下载命令
powershell 复制代码
scp -r user@服务器A:/remote/source_dir C:\Users\5277\Downloads\source_dir\
示例
powershell 复制代码
scp -r root@192.168.1.10:/opt/project C:\Users\5277\Downloads\project\

下载完成后,本地目录结构:

复制代码
C:\Users\5277\Downloads\project

✅ 方案二:rsync(推荐,支持断点续传)

适合:目录大、重要数据、网络不稳定

bash 复制代码
rsync -avz --progress \
root@192.168.1.10:/opt/project/ \
/mnt/c/Users/5277/Downloads/project/

参数说明:

  • -a:保持权限、时间
  • -v:显示过程
  • -z:压缩传输
  • --progress:实时进度

⚠️ 注意路径末尾 /,否则会多嵌套一层目录。


四、Windows 本地校验文件完整性(强烈建议)

1️⃣ 查看文件是否存在

bash 复制代码
ls -lh C:\Users\5277\Downloads\project

2️⃣ 文件数量校验(简单但有效)

bash 复制代码
find C:\Users\5277\Downloads\project | wc -l

五、Windows 上传目录到目标服务器

目标服务器目录

复制代码
/home/project

✅ 使用 scp 上传(最省事)

powershell 复制代码
scp -r "C:\Users\5277\Downloads\project" root@服务器B:/home/project

上传后结构为:

复制代码
/home/project/project
如果只想上传 project 内部内容:
powershell 复制代码
scp -r "C:\Users\5277\Downloads\project\*" root@服务器B:/home/project/

✅ 使用 rsync 上传(生产环境推荐)

bash 复制代码
rsync -avz --progress /mnt/c/Users/5277/Downloads/project/ root@192.168.1.20:/home/project/

优势:

  • 支持断点续传
  • 可重复执行
  • 不会重复传输已存在文件

六、上传完成后的关键检查(很多人翻车在这)

1️⃣ 查看目录

bash 复制代码
ls -lh /home/project

2️⃣ 修正权限

bash 复制代码
chown -R dk_project:dk_project /home/project

chmod -R 755 /home/project

⚠️ 如果是 Docker:

bash 复制代码
docker inspect zfile | grep Mounts -A 10

确认宿主机目录是否正确挂载。


七、常见问题与坑位总结

❌ scp 中断?

  • 只能重来
  • 重要数据请用 rsync

❌ 多套一层目录?

  • 路径末尾 / 用错了

八、推荐实践总结(实话)

场景 推荐方案
小目录、临时传输 scp
生产数据 / 大目录 rsync
新手、可视化 WinSCP
Docker 数据目录 rsync + 权限校验

九、完整命令模板(可直接复用)

bash 复制代码
# 服务器 A → Windows
rsync -avz --progress root@服务器A:/源目录/ /mnt/c/tmp/source/

# Windows → 服务器 B
rsync -avz --progress /mnt/c/tmp/source/ root@服务器B:/home/project/

十、结语

这类 "服务器 ↔ Windows ↔ 服务器" 的目录迁移,本质拼的是:

  • 工具是否靠谱(rsync > scp)
  • 路径是否严谨
  • 权限是否到位

命令本身不难,翻车往往是细节。

相关推荐
熊猫钓鱼>_>14 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
Ruiery14 小时前
Linux 6.6内核内存管理深度解析(十七):vmalloc — 内核要“虚拟连续“就够:物理页逐个凑,页表来连
linux·运维·服务器
R²AIN SUITE15 小时前
企业智能体平台私有化部署需要什么服务器?CPU、内存、显卡与项目管理集成的7个评估项
运维·服务器
坚定的共产主义生产设备永不宕机15 小时前
服务器从裸机开始搭建ESXI虚拟机
linux·服务器·网络
刚入门的大一新生15 小时前
Linux-线程封装
linux·运维·服务器
Android系统攻城狮15 小时前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮15 小时前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
小白的码BUG之路16 小时前
K8s -- 启动一主二从节点
linux·运维·服务器
AI_Lab0116 小时前
服务器管理工具要在服务器上装 Agent,安全吗?
服务器·安全·github
风娜16 小时前
【Linux网络】UDP 服务器怎么写?从 socket、bind 到 recvfrom/sendto,手写完整回显服务器
linux·服务器·网络