跨服务器传输:使用 FTP/SFTP 节点实现网站备份文件的自动同步

2026-01-25 28 0

别再半夜手动传备份了,这活儿交给 n8n 就完事了

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

跨服务器传输:使用 FTP/SFTP 节点实现网站备份文件的自动同步

N8N大学,我们的原则是:只要这事儿需要重复做两次,它就值得被自动化。今天,咱们就来硬核实战,用 n8n 的 SSH 节点(支持 SFTP/SCP)打通服务器之间的“任督二脉”,实现备份文件的全自动同步。

准备工作:你的“传送门”需要什么钥匙?

在开始构建工作流之前,请确保你手头有以下硬性条件:

  • 两个服务器:源服务器(存放备份文件的)和目标服务器(需要同步过去的)。可以是 VPS、云主机等。
  • n8n 环境:本地或服务器上跑的 n8n 实例。
  • SSH 访问权限:你需要知道服务器 IP、端口(默认 22)、用户名。
  • 私钥(Private Key):强烈建议使用 SSH 密钥对登录,比密码更安全,也更利于自动化。

核心实操:三步搭建自动同步管道

我们将构建一个流程:从源服务器获取文件列表 -> 检查文件 -> 传输到目标服务器。这里我们主要使用 SSH 节点。

步骤一:连接源服务器,锁定目标文件

首先,我们需要告诉 n8n 去哪里找备份包。

  1. 在 n8n 画布中添加一个 SSH 节点。
  2. Credentials(凭证)中配置源服务器的连接信息。重点来了:Authentication Method 建议选 Private Key,把你的 id_rsa 私钥内容贴进去。
  3. 在节点配置中,Operation 选择 Execute
  4. 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 改回 ExecuteCommand 填写:

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 UploadSFTP Download 操作。如果你不想在目标服务器执行命令,流程可以改为:n8n 通过 SFTP 从源服务器下载文件到 n8n 主机临时目录 -> 再通过 SFTP 上传到目标服务器。这样适合文件不大的场景。

总结与资源

通过 n8n 的 SSH 节点,我们成功将跨服务器的文件同步变成了“无人值守”的自动化流程。这不仅解放了你的时间,更降低了人为操作失误的风险。

N8N大学 (n8ndx.com),我们致力于挖掘低代码自动化的极限。如果你还有更复杂的同步需求(比如同步前比对文件 MD5),欢迎在评论区交流,笔者会挑选典型问题在下期教程中解答。

相关文章

n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决
当n8n流程意外中断,Error Handling节点如何配置才能优雅降级?
n8n Error Handling节点和Try/Catch节点,到底该怎么选?

发布评论