使用 rclone 备份远程 Windows 服务器文件

前言

本地、远程都是 Windows 时,可以用 rclone 通过 SFTP 把远程大目录拉到本机备份盘。

远程需先装好 OpenSSH 服务器;本机只需 rclone.exe 和一次 config,之后重复执行同一条 copy 即可增量补传。

下文示例把 rclone 放在 D:\Tools\rclone\,远程名 win_src,源路径 D:/data/wwwjarapi/jkqfile/static,目标 D:\Backup\jkqfile_bak,请按你的环境替换。

远程 OpenSSH

源服务器上以管理员身份安装 OpenSSH 服务端(详见 Microsoft 文档)。

安装服务端

先查看本机可选组件里的准确名称与状态(不同版本后缀可能略有差异):

1
Get-WindowsCapability -Online | Where-Object Name -like "OpenSSH.Server*"

State 已是 Installed 则跳过安装,直接看下一节「启动服务」。

方式一:设置界面

适合 Add-WindowsCapability 报错或走 WSUS 的环境。

  1. 打开 设置 → 应用 → 可选功能(服务器上可能是 设置 → 系统 → 可选功能)。
  2. 添加功能 / 查看功能
  3. 搜索 OpenSSH 服务器,安装。

方式二:PowerShell 在线安装

用查询结果里的 Name 安装,避免手写版本后缀不对:

1
2
3
Get-WindowsCapability -Online |
Where-Object Name -like "OpenSSH.Server*" |
Add-WindowsCapability -Online

若仍失败,常见错误 0x800f0954 多与 WSUS 有关:组策略里启用「指定可选组件安装和组件修复的设置」,并勾选 直接从 Windows Update 下载修复内容和可选功能,而不是从 WSUS,再重试。
s

启动服务

安装完成后执行:

1
2
3
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-Service sshd

防火墙需放行 TCP 22(或你改的 SSH 端口)。

本地可先执行 ssh 用户名@源IPsftp 用户名@源IP,能连上再配 rclone。

备份账号

下文统一用 Windows 用户名 + 密码 登录 SFTP,不用公钥。

添加用户

Windows 上的 OpenSSH 没有单独的 SSH 用户表,用的就是源机上已有的本地或域账号及其登录密码。

源服务器上建议单独建一个备份专用账号(示例名 backup_user):

1
net user backup_user 你的强密码 /add

也可在「计算机管理 → 本地用户和组」里新建用户并设置密码。

授予 NTFS 读取

SFTP 读文件走的是 NTFS 权限,不必给该目录做 SMB「共享」(除非你还用网络邻居访问)。

图形界面(源服务器上操作):

  1. 资源管理器中右键 D:\data\wwwjarapi\jkqfile\static属性安全编辑
  2. 添加,输入 backup_user检查名称确定
  3. 选中列表里的 backup_user,在下方权限区勾选 读取读取和执行列出文件夹内容(三项通常一起选;不要勾「写入」「修改」)。
  4. 确定 保存。若提示继承,选 仅应用到本文件夹、子文件夹和文件 即可覆盖整个备份树。

域账号在「添加」里写 域名\backup_user

改完后可用 backup_user 登录源机(或 runas /user:backup_user cmd),看能否打开 D:\data\wwwjarapi\jkqfile\static 里的文件。

若密码登录失败,在源机编辑 C:\ProgramData\ssh\sshd_config,确认存在且未注释:

1
PasswordAuthentication yes

保存后执行:

1
Restart-Service sshd

下载 rclone

前往 rclone.org/downloads 下载 Windows AMD64 压缩包,解压得到 rclone.exe,放到例如 D:\Tools\rclone\ 目录。

配置远程源

打开 CMD 或 PowerShell,进入交互配置(只需做一次):

1
D:\Tools\rclone\rclone.exe config

按提示操作:

  1. 输入 n 新建 remote,名称填 win_src
  2. 类型选 sftp 对应的值是55
  3. 填写源服务器 IPWindows 用户名密码(与上一节备份账号一致)
  4. 询问私钥路径时直接回车(留空,表示用密码)
  5. 其余项默认回车
  6. 输入 q 退出

配置写在 %APPDATA%\rclone\rclone.conf,勿泄露或提交到仓库。

主机指纹

首次连接可能出现 NOTICE: No host key validation is being performed,表示 rclone 尚未校验 SSH 主机密钥,连接仍能继续,但有中间人风险。

在本机先用 OpenSSH 连一次源机并信任指纹(会写入 known_hosts):

1
ssh backup_user@源服务器IP

输入 yes 接受指纹后 exit 退出即可。

本机登录名即当前运行 rclone 的 Windows 用户文件夹名(不是源机上的 backup_user)。
在 PowerShell 中可查看:

1
echo "$env:USERPROFILE\.ssh\known_hosts"

也可直接编辑 %APPDATA%\rclone\rclone.conf,在 [win_src] 段增加一行(把 Administrator 换成上一步的 $env:USERNAME):

1
known_hosts_file = C:\Users\DELL\.ssh\known_hosts

之后 NOTICE 应消失;若源机重装系统或换了 SSH 主机密钥,需按 rclone SFTP 文档 更新 known_hosts

测试

带完整路径测试:

1
D:\Tools\rclone\rclone.exe lsd win_src:/D:/data/wwwjarapi/jkqfile/static

列目录成功后再执行 copy

拉取备份

copy 只把远程文件复制到本地,不会删除本地已有文件;中断后重新执行相同命令会跳过已传完的文件,只传剩余部分。
源服务器全程不会在磁盘上生成临时打包文件

基本拉取(带进度):

1
D:\Tools\rclone\rclone.exe copy win_src:/D:/data/wwwjarapi/jkqfile/static D:\Backup\jkqfile_bak --progress

生产环境可在上一条基础上增加并发、限速与日志(参数按带宽与磁盘调整):

1
2
3
4
5
6
7
D:\Tools\rclone\rclone.exe copy win_src:/D:/data/wwwjarapi/jkqfile/static D:\Backup\jkqfile_bak `
--progress `
--transfers=8 `
--checkers=16 `
--bwlimit=50M `
--log-file=D:\Tools\rclone\rclone.log `
--log-level=INFO

远程路径在 SFTP 下常写成 win_src:/D:/data/wwwjarapi/jkqfile/static 这种形式;若报错,先用下面命令试列目录再改路径。

若希望本地目录与远程完全一致(本地多出的旧文件会被删),改用 sync,首次建议加 –dry-run 预览。

计划任务

定时备份可在「任务计划程序」里 nightly 执行上节的 copy 命令,或写入 D:\Tools\rclone\backup.ps1 后由计划任务调用 powershell.exe -File D:\Tools\rclone\backup.ps1

运行任务的 Windows 用户必须能读取 %APPDATA%\rclone\rclone.conf(其中已保存 SFTP 密码)。

总结

  1. 源机安装 OpenSSH,用 net user 等建好备份专用 Windows 账号(用户名 + 密码)与目录读权限
  2. 本机 configwin_src,SFTP 填 IP、用户名、密码,私钥留空
  3. copy 拉取;断线重跑同命令即可续传,源端无临时文件