前言
在服务器上,最怕的就是:
- 服务器崩了
- 硬盘挂了
- 网站文件没备份
- 想恢复,发现啥都没有了……
- 宝塔等备份莫名没备份上全备份自己服务器上,硬盘爆了
为了解决「自己文件自己掌控」的问题,我们写了一个纯 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)
脚本会自动:
- 检查依赖(
lftp、crontab) - 如使用
<(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) ➕ 新建备份任务
步骤:
- 输入本地路径(文件/目录)
- 输入远程目录
- 选择账号
- 选择定时方式:每天固定时间(时:分)或每隔 N 分钟
- 是否立即执行一次
备份逻辑
📂 本地目录 → 远程目录(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。让备份真正变成「自动、可控、可靠」。