日常工作中经常遇到Windows系统从Linux服务器下载超大文件的场景,比如超过500MB的安装包、数据文件等,常规的浏览器下载易中断、SCP无断点续传,而借助Docker容器+Rsync工具,既能规避Windows与Linux的环境差异,又能实现断点续传,完美解决超大文件下载难题。本文以Windows 11系统为例,手把手教你用Docker Ubuntu容器,通过PEM密钥免密鉴权下载Linux服务器超大文件。
一、核心优势
相比传统下载方式,本方案的核心优势:
- 环境隔离:无需在Windows本地安装WSL、Rsync等工具,Docker容器用完即删,不污染本地环境;
- 断点续传:Rsync支持断点续传,网络波动中断后可从断点继续,避免重新下载;
- 免密鉴权:通过PEM密钥实现SSH免密登录,无需反复输入服务器密码;
- 跨系统兼容:抹平Windows与Linux的权限、命令差异,适配各类Linux服务器。
二、前置准备
- 本地环境:Windows 11系统,已安装Docker Desktop(确保Docker服务正常运行);
- 服务器信息:Linux服务器IP、PEM私钥文件(路径示例:
C:\Users\me\.ssh\key.pem); - 文件信息:服务器待下载文件路径(示例:
/home/ubuntu/ollama/ollama-linux-amd64.tgz); - 本地路径:准备好文件保存目录(示例:
C:\Downloads)。
三、实操步骤
步骤1:启动Docker Ubuntu容器(挂载密钥+下载目录)
打开Windows PowerShell(无需管理员权限),执行以下命令启动Ubuntu容器,同时挂载PEM密钥和本地下载目录:
docker run -it --name unbuntu_downloader `
-v C:\Users\me\.ssh\key.pem:/root/.ssh/key.pem `
-v C:\Downloads:/down `
ubuntu:latest /bin/bash
参数说明:
-it:以交互式终端启动容器,方便输入命令;--name unbuntu_downloader:给容器命名,便于管理;-v C:\Users\me\.ssh\key.pem:/root/.ssh/key.pem:将本地PEM密钥挂载到容器内/root/.ssh/key.pem(非Windows挂载目录,避免权限问题);-v C:\Downloads:/down:将本地下载目录挂载到容器内/down,下载的文件会直接同步到Windows本地;ubuntu:latest:使用官方Ubuntu镜像,保证工具完整性。
执行后会自动进入容器的bash终端,接下来的操作均在容器内完成。
步骤2:安装Rsync和SSH客户端
容器内默认无Rsync和SSH工具,执行以下命令安装(首次安装需联网,约1分钟):
apt update && apt install -y rsync openssh-client
步骤3:修改PEM密钥权限(SSH强制要求)
SSH严格要求私钥文件仅当前用户可读(权限600),否则会提示权限过高报错,执行以下命令修改:
chmod 600 /root/.ssh/key.pem
步骤4:Rsync断点续传下载超大文件
执行以下命令启动下载,核心是通过PEM密钥免密鉴权,同时开启断点续传和进度显示:
rsync -avz --progress \
-e "ssh -i /root/.ssh/key.pem -o StrictHostKeyChecking=no" \
ubuntu@服务器IP:/home/ubuntu/ollama/ollama-linux-amd64.tgz \
/down/
参数详解:
-avz:a(归档模式,保留文件属性)、v(详细输出)、z(压缩传输,加快速度);--progress:实时显示传输进度(速度、剩余时间、完成百分比);-e:指定SSH连接参数;ssh -i /root/.ssh/key.pem:指定PEM密钥路径,实现免密登录;StrictHostKeyChecking=no:跳过首次连接的主机密钥验证,避免手动确认;ubuntu@服务器IP:服务器登录用户+IP;/home/ubuntu/ollama/ollama-linux-amd64.tgz:服务器待下载文件绝对路径;/down/:容器内下载目录(对应Windows本地C:\Downloads)。
四、关键问题排查
问题1:PEM密钥权限报错(WARNING: UNPROTECTED PRIVATE KEY FILE!)
- 原因:Windows挂载目录的文件权限无法通过
chmod修改,密钥挂载到/down等Windows挂载目录会导致权限始终为0777; - 解决:将密钥挂载到容器原生目录(如
/root/.ssh),再执行chmod 600 /root/.ssh/key.pem。
问题2:Rsync中断后续传
- 解决:直接重新执行步骤4的Rsync命令,工具会自动识别已下载的文件片段,从断点继续传输。
问题3:服务器拒绝PEM鉴权
- 检查服务器
~/.ssh/authorized_keys是否包含PEM公钥; - 确认服务器登录用户(如
ubuntu)对下载文件有读取权限; - 检查PEM密钥是否完整,无换行缺失、多余空格。
五、总结
本方案通过Docker容器快速搭建Linux环境,结合Rsync的断点续传和SSH免密鉴权,完美解决Windows从Linux服务器下载超大文件的痛点。相比传统的SCP、浏览器下载,稳定性和效率大幅提升,且无需修改本地系统配置,是跨系统超大文件传输的最优解之一。