前言

在服务器上,最怕的就是:

  • 服务器崩了
  • 硬盘挂了
  • 网站文件没备份
  • 想恢复,发现啥都没有了……
  • 宝塔等备份莫名没备份上全备份自己服务器上,硬盘爆了

为了解决「自己文件自己掌控」的问题,我们写了一个纯 Bash 的 FTP/SFTP 自动备份与管理脚本,支持:

  • 多 FTP / FTPS / SFTP 账号
  • 多备份任务
  • 定时自动备份
  • 手动立即执行备份
  • 浏览远程目录
  • 下载远程文件/目录
  • 删除远程文件/目录
  • 一键卸载(清理配置 + crontab + 脚本本体)

📌 功能总览

功能 说明
多 FTP / FTPS / SFTP 账号支持三协议,适配各种主机/VPS
多备份任务每个账号可独立配置多个任务
定时备份支持每天固定时间、每隔 N 分钟备份
即时执行新建任务可立即执行一次
远程浏览直接查看 FTP/SFTP 远程目录结构
远程下载下载远程文件或目录
远程删除删除文件/目录,带确认提示
自动保存脚本支持 bash <(curl ...) 自动落地脚本
一键卸载清除配置/任务/脚本,干净退出

兼容主流 Linux:Debian、Ubuntu、CentOS、AlmaLinux、Rocky、openSUSE、Arch 等。


🔐 三协议支持(新增完整说明)

脚本多账号完全支持:

1️⃣ FTP(传统)

用于一般虚拟主机、廉价空间等。

2️⃣ FTPS(FTP over SSL/TLS)

适合需要传输加密的网站空间:

  • 自动开启 SSL 强制加密
  • 自动保护数据通道
  • 自动 TLS AUTH
  • 登录方式与 FTP 一样,只是连接加密

3️⃣ SFTP(基于 SSH)

适合 VPS / 服务器 / OpenWrt / NAS:

  • 自动 SSH 连接
  • 自动跳过 host key 确认
  • 端口默认 22,可自定义
  • 不依赖 FTP 服务,安全性更高
✔ 无论 FTP/FTPS/SFTP,浏览/下载/上传/删除/备份逻辑完全一致。

⚡ 快速安装

bash <(curl -L https://raw.githubusercontent.com/hiapb/ftp/main/back.sh)

脚本会自动:

  • 检查依赖(lftpcrontab
  • 如使用 <(curl ...),自动保存到 /root/back.sh 并赋予权限。

后续进入主菜单只需执行:bash /root/back.sh


🧭 主菜单功能说明

启动后界面如下:

=======================================
🌐 FTP 备份工具(多账号版)
=======================================
🔐 FTP 账号:已配置 X 个

1) 📂 管理 FTP/SFTP 账号
2) ➕ 新建备份任务
3) 📋 查看/立即执行备份任务
4) 🗑 删除备份任务
5) 🧹 卸载
0) ❎ 退出

说明:

  • 1)账号管理:新增/查看/删除账号 & 远程操作
  • 2)新建备份任务:设置本地路径 → 远程目录 → 定时方式
  • 3)查看/执行任务:可手动执行其中任意任务
  • 4)删除任务:从 crontab 移除
  • 5)卸载:删除配置、任务、脚本本体
  • 0)退出

🔐 FTP / FTPS / SFTP 账号管理

进入:1) 📂 管理 FTP/SFTP 账号

菜单:

1) ➕ 新增账号
2) 📋 查看账号列表
3) 🗑 删除账号
4) 🔍 使用账号浏览/下载/删除远程文件
0) 返回

1️⃣ 新增账号

输入:

  • 协议(FTP / FTPS / SFTP)
  • 账号名称(如 main/web1/db1)
  • 主机名
  • 端口(FTP/FTPS 默认 21,SFTP 默认 22)
  • 用户名
  • 密码

保存位置:~.ftp_backup_tool/accounts/<ACCOUNT_ID>.conf

示例:

ACCOUNT_ID="web1"
FTP_HOST="ftp.example.com"
FTP_PORT="21"
FTP_USER="user"
FTP_PASS="password"
FTP_PROTO="ftp"

2️⃣ 查看账号列表

显示类似:

[1] 账号: main | 协议: FTP | 主机: ftp.example.com | 用户: user
[2] 账号: server | 协议: SFTP | 主机: 1.2.3.4 | 用户: root

3️⃣ 删除账号(含关联任务)

删除账号会自动删掉:

  • 配置文件
  • 所有带 # FTP_BACKUP[ACCOUNT_ID] 的定时任务。

🌍 使用账号浏览 / 下载 / 删除远程文件

进入远程操作菜单:

1) 📂 列出目录
2) 📥 下载文件
3) 📥 下载目录
4) ❌ 删除文件/目录
5) ⚠️ 删除整个目录
0) 返回

1️⃣ 列出目录

输入路径:

  • 根目录:/
  • 子目录:/wwwroot
  • 自动过滤 ...

2️⃣ 下载远程文件

输入:远程目录(如 /wwwroot/)、远程文件名、本地保存目录(自动创建)。

使用 lftp:

get "文件名" -o "本地路径"

3️⃣ 下载远程目录

例如:远程目录 /site,本地目录 /root/site_bak

内部执行:

mirror "/site" "/root/site_bak"

4️⃣ 删除远程文件(支持删除目录名)

输入:远程目录、文件或目录名(都能删)。

执行:rm -r "名称"

支持删目录,不再出现 FTP 的 “550 Is a directory”。

5️⃣ 删除整个远程目录

输入目录路径,如:/backup/old。禁止删除根目录 /


💾 新建备份任务(本地 → FTP/SFTP)

进入:2) ➕ 新建备份任务

步骤:

  1. 输入本地路径(文件/目录)
  2. 输入远程目录
  3. 选择账号
  4. 选择定时方式:每天固定时间(时:分)或每隔 N 分钟
  5. 是否立即执行一次

备份逻辑

📂 本地目录 → 远程目录(mirror -R)

mirror -R "本地目录" "远程目录"

📄 本地文件 → 远程目录(put)

put "本地文件" -o "文件名"

⏰ 查看 / 立即执行任务

展示所有:

*/10 * * * * bash /root/back.sh run xxx ... # FTP_BACKUP[xxx]

你可以选择某条任务立即执行。

🗑 删除备份任务

从 crontab 移除选中的任务即可。


🧹 卸载工具(彻底清理)

功能:清理所有 # FTP_BACKUP 任务,删除 ~/.ftp_backup_tool/ 文件夹,删除脚本本体 /root/back.sh。卸载后完全无残留。


✅ 使用建议与技巧

路径带空格时:

ln -s "/path/with space" /root/path_nospace

建议账号分类:

  • web_backup:网站
  • db_backup:数据库
  • config_backup:配置文件

数据库备份示例:

  • mysqldump 导出到 /root/db_bak/db.sql
  • 本脚本同步 /root/db_bak/ 到 FTP

🎉 总结

这个脚本能让你轻松管理多个 FTP/SFTP 账号,自动定时备份,并支持完整支持 FTP / FTPS / SFTP。让备份真正变成「自动、可控、可靠」。