前言
在服务器上,最怕的就是:
- 服务器崩了
- 硬盘挂了
- 网站文件没备份
- 想恢复,发现啥都没有了……
- 宝塔等备份莫名没备份上全备份自己服务器上,硬盘爆了
为了解决「自己文件自己掌控」的问题,我们写了一个纯 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
非常适合:
- VPS 用户
- 网站站长
- 需要异地备份的人
- 任何习惯 FTP/SFTP 同步的人
让备份真正变成「自动、可控、可靠」。
好东西
ftp?
@chy #3 对 因为买了bbr 7美元一年的存储盒,不想他浪费
@Whites #4 我也买了还没用,应该有支持rsync吧
优秀,已点赞加鸡腿收藏
我之前和ai聊,ai一直说ftp不安全,说至少也得用ftps,不知道到底安不安全
先收藏
ftp明文传输有风险
换sftp怎么样,还能有证书验证
好帖,顶