别再半夜手动传备份了,这活儿交给 n8n 就完事了
笔者见过太多站长和运维兄弟,每天定时守在电脑前,手动把网站备份文件从 A 服务器拖到 B 服务器,或者从 VPS 下载到本地硬盘。这事儿不仅枯燥,一旦网络抖动或者忘了,后果可能就是数据丢失。

在 N8N大学,我们的原则是:只要这事儿需要重复做两次,它就值得被自动化。今天,咱们就来硬核实战,用 n8n 的 SSH 节点(支持 SFTP/SCP)打通服务器之间的“任督二脉”,实现备份文件的全自动同步。
准备工作:你的“传送门”需要什么钥匙?
在开始构建工作流之前,请确保你手头有以下硬性条件:
- 两个服务器:源服务器(存放备份文件的)和目标服务器(需要同步过去的)。可以是 VPS、云主机等。
- n8n 环境:本地或服务器上跑的 n8n 实例。
- SSH 访问权限:你需要知道服务器 IP、端口(默认 22)、用户名。
- 私钥(Private Key):强烈建议使用 SSH 密钥对登录,比密码更安全,也更利于自动化。
核心实操:三步搭建自动同步管道
我们将构建一个流程:从源服务器获取文件列表 -> 检查文件 -> 传输到目标服务器。这里我们主要使用 SSH 节点。
步骤一:连接源服务器,锁定目标文件
首先,我们需要告诉 n8n 去哪里找备份包。
- 在 n8n 画布中添加一个 SSH 节点。
- 在 Credentials(凭证)中配置源服务器的连接信息。重点来了:Authentication Method 建议选
Private Key,把你的id_rsa私钥内容贴进去。 - 在节点配置中,Operation 选择
Execute。 - 在 Command 栏输入你的查找命令,例如:
ls -t /var/www/backup/*.zip | head -n 1。这行命令的意思是列出备份目录下最新的一个 zip 文件。
步骤二:把“文件名”变成“数据流”
上一步的 SSH 节点会返回一个执行结果,我们需要从中提取文件名。
通常 SSH 节点的输出会在 json 对象里。为了让后续节点能识别,我们可以加一个 Set 节点(或者直接在 SSH 节点后用 Function 节点)。
假设 SSH 返回的数据在 json.output 中,你可以这样设置:
- Property Name:
backupFile - Value:
{{$json.output}}(去除末尾换行符)
这一步是为了把“字符串”变成 n8n 能流转的“变量”。
步骤三:执行传输(从 A 到 B)
这是最关键的一步,我们要把文件“搬运”过去。
再次添加一个 SSH 节点,这次连接你的目标服务器(记得切换对应的 Credential)。在操作配置上,这次我们不选 Execute,而是选择 SFTP Upload。
- Operation:
SFTP Upload - Local Path: 这里有点 trick,n8n 的 SFTP Upload 通常需要本地文件路径。但我们的文件在远程源服务器上。这时,我们需要用 SSH Download 节点先下到 n8n 所在的机器,再通过 SFTP Upload 传上去?
(N8N大学特别优化方案):为了不占用 n8n 主机带宽,我们可以直接在目标服务器上执行 SCP 命令,让目标服务器自己去源服务器“拉”文件。
切换到目标服务器的 SSH 节点,Operation 改回 Execute,Command 填写:
scp -P 22 user@源服务器IP:{{$json.backupFile}} /目标目录/
注意:这里需要目标服务器配置好对源服务器的免密登录(SSH Key),或者在命令里带上密码(不安全,不推荐)。
避坑指南:两个让你抓狂的细节
笔者在实测中踩过这两个坑,分享出来帮大家省点时间:
1. 路径与权限的“坑”
n8n 运行的用户(比如 root 或者 n8n)必须拥有读写目标目录的权限。如果你的备份文件权限是 600,n8n 可能无法读取。建议在源服务器的备份脚本里,打包完成后顺手 chmod 644 一下。
2. SSH Host Key Checking
如果你的 n8n 是第一次连接某台服务器,可能会因为“Host key verification failed”而报错。在 SSH 节点的配置中,找到 Additional Options -> Ready to Connect Prompt,或者在 Command 里加上 StrictHostKeyChecking=no 参数(仅在信任的网络环境下使用)。
FAQ 问答
Q: 我的 n8n 在 Docker 里,它能访问到我宿主机的文件吗?
A: 默认不能。如果你用 Docker 部署 n8n,建议将宿主机的备份目录映射到 Docker 容器内(使用 -v 挂载),然后在 n8n 的 SFTP Upload 节点中使用容器内的路径。
Q: 传输大文件(几十 GB)会中断吗?
A: n8n 的 SSH 节点在执行命令时如果超时可能会断开。对于超大文件,建议在源服务器写好压缩脚本,然后用 n8n 只负责触发传输命令,或者使用支持断点续传的工具(如 rsync)封装在 SSH Command 中。
Q: 只有 SFTP 没有 SCP 怎么办?
A: 上文提到的 SSH 节点直接支持 SFTP Upload 和 SFTP Download 操作。如果你不想在目标服务器执行命令,流程可以改为:n8n 通过 SFTP 从源服务器下载文件到 n8n 主机临时目录 -> 再通过 SFTP 上传到目标服务器。这样适合文件不大的场景。
总结与资源
通过 n8n 的 SSH 节点,我们成功将跨服务器的文件同步变成了“无人值守”的自动化流程。这不仅解放了你的时间,更降低了人为操作失误的风险。
在 N8N大学 (n8ndx.com),我们致力于挖掘低代码自动化的极限。如果你还有更复杂的同步需求(比如同步前比对文件 MD5),欢迎在评论区交流,笔者会挑选典型问题在下期教程中解答。