rsync 是首选:支持增量、保留权限/时间戳、跳过未变动文件、自动忽略不存在路径,配合 ssh 免密登录可实现稳且可重复的远程配置文件备份。

用 SSH 快速备份远程服务器配置文件,核心是 免密登录 + rsync 或 scp 一键拉取,不依赖远程服务部署,操作轻量、安全、可脚本化。关键不在“多快”,而在“稳且可重复”。
用 rsync 拉取配置文件(推荐)
rsync 是首选:支持增量、保留权限/时间戳、跳过未变动文件、自动忽略不存在路径。
rsync -avz --delete \
-e "ssh -p 22" \
root@192.168.1.100:/etc/{hosts,nginx/conf.d/,redis/,my.cnf} \
/backup/configs/192.168.1.100_$(date +%Y%m%d)/
说明:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
-a:归档模式(含-rltgoDp,保留权限、链接、时间等) -
-v:显示过程(调试用,生产可去掉) -
-z:压缩传输(尤其跨公网时省带宽) -
--delete:目标目录中存在但源里没有的文件会被删(谨慎启用,建议先测试) -
-e "ssh -p 22":指定 SSH 端口(非默认 22 时必填) - 大括号
{...}是 shell 扩展,一次拉多个路径(注意空格和逗号无空格) - 目标路径带日期,避免覆盖,也方便按天归档
⚠️ 提示:若远程路径不存在(如
/etc/my.cnf在某台机器上没装 MySQL),rsync 默认报错退出。加--ignore-missing-args可跳过(rsync ≥ 3.1.0),或改用--files-from配合ssh ... ls动态生成有效路径列表。
用 scp 批量拉取(简单直接)
适合单次、少量文件,语法更直观:
# 先建好当天目录
mkdir -p /backup/configs/192.168.1.100_$(date +%Y%m%d)
# 逐个拉取(支持通配符,但需引号防本地展开)
scp -P 22 root@192.168.1.100:/etc/hosts \
root@192.168.1.100:/etc/nginx/conf.d/*.conf \
/backup/configs/192.168.1.100_$(date +%Y%m%d)/
说明:
-
scp不支持大括号展开,所以多个路径要重复写root@host:... -
*.conf在远程执行(因为路径带root@host:),不是本地 shell 展开 - 若某路径无匹配文件,scp 会报错并中断;可用
shopt -s nullglob(bash)或改用 rsync 规避
前提:必须配置 SSH 免密登录
否则每次都要输密码,无法自动化:
# 在备份机(本地)执行: ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa_backup ssh-copy-id -i ~/.ssh/id_rsa_backup.pub root@192.168.1.100
验证是否生效:
ssh -o ConnectTimeout=5 -o BatchMode=yes root@192.168.1.100 exit # 返回 0 表示成功;非 0 则检查 .ssh 权限(chmod 700 ~/.ssh; chmod 600 ~/.ssh/*)
加个定时任务自动跑
编辑 crontab -e,每天凌晨 2:30 备份:
30 2 * * * /usr/bin/rsync -a --delete -e "ssh -p 22" root@192.168.1.100:/etc/hosts:/etc/nginx/conf.d/ /backup/configs/$(hostname)_$(date +\%Y\%m\%d)/ 2>> /var/log/backup.log
注意:
-
date命令在 cron 中需转义%(写成\%Y\%m\%d) - 日志重定向用
2>>记录错误,便于排查 - 生产环境建议用独立用户(如
backup)替代 root,配合sudoers限制只读/etc/
不复杂但容易忽略。










