如何以Synology NAS DSM作为SSH客户端定时拉取远程Linux服务器数据至本地?
如何以Synology NAS DSM作为SSH客户端定时拉取远程Linux服务器数据至本地?
嗨,我来一步步帮你搞定这个需求,其实流程并不复杂,咱们按顺序来:
1. 在Synology上生成SSH免密登录密钥对
首先得让Synology能不用密码就登录到远程Ubuntu服务器,这样定时任务才能自动运行:
- 打开Synology DSM的「控制面板」→「终端机和SNMP」,勾选「启用SSH服务」,默认端口22就行,点击「应用」保存。
- 用你本地电脑的终端(Mac/Linux直接用自带终端,Windows可以用Putty或PowerShell)连接到Synology的SSH,命令是:
ssh admin@你的Synology_IP地址,输入DSM管理员密码登录。 - 登录后生成安全的ed25519密钥对,执行命令:
ssh-keygen -t ed25519,全程按回车就行不要设置密钥密码(不然定时任务会卡在输密码环节)。生成的密钥会存在~/.ssh目录下,其中id_ed25519是私钥,id_ed25519.pub是公钥。
2. 将公钥上传到远程Ubuntu服务器
这一步是让远程服务器信任Synology的连接:
- 最简单的方法是用
ssh-copy-id命令,在Synology的SSH终端里执行:
比如你的远程Ubuntu用户是ssh-copy-id -i ~/.ssh/id_ed25519.pub 远程服务器用户名@远程服务器IPubuntu,IP是192.168.1.100,那命令就是ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@192.168.1.100,输入远程服务器的用户密码即可完成公钥上传。 - 如果
ssh-copy-id命令无法使用,就手动操作:- 在Synology终端执行
cat ~/.ssh/id_ed25519.pub,复制输出的全部内容。 - 登录远程Ubuntu服务器,编辑
~/.ssh/authorized_keys文件,把刚才复制的公钥内容粘贴进去并保存。 - 执行以下命令确保权限正确(SSH对权限要求很严,权限不对会拒绝连接):
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- 在Synology终端执行
3. 测试SSH连接和rsync同步命令
先验证免密登录是否成功:在Synology终端执行ssh 远程服务器用户名@远程服务器IP,如果能直接登录到Ubuntu服务器,说明密钥配置没问题。
接下来测试rsync同步命令,比如你要把远程Ubuntu的/var/www/html目录同步到Synology的/volume1/backup/server_data目录,命令如下:
rsync -avz --delete 远程服务器用户名@远程服务器IP:/var/www/html/ /volume1/backup/server_data/
参数解释:
-a:归档模式,保留文件的权限、时间戳、所有者等所有属性-v:显示同步的详细过程,方便排查问题-z:传输时压缩数据,节省带宽--delete:删除Synology本地存在但远程服务器没有的文件,保持两地数据完全一致(如果不需要这个同步规则,可以去掉此参数)
建议先加--dry-run参数做模拟测试,确认命令没问题再实际执行:
rsync -avz --delete --dry-run 远程服务器用户名@远程服务器IP:/var/www/html/ /volume1/backup/server_data/
如果模拟输出正常,去掉--dry-run执行一次,检查Synology的目标目录是否成功同步到远程数据。
4. 在Synology DSM设置定时自动任务
最后一步把同步命令做成定时任务:
- 打开DSM的「控制面板」→「任务计划」,点击「创建」→「触发的任务」→「用户定义的脚本」。
- 常规设置:给任务起个名字(比如「同步远程服务器数据」),用户选择
root(避免权限不足导致同步失败)。 - 触发设置:根据你的需求设置执行频率,比如每天凌晨2点、每周日凌晨1点等,调整好时间后保存。
- 任务设置:在「用户定义的脚本」框里粘贴测试好的rsync命令,为了方便排查问题,建议把同步日志保存到文件,比如:
这样每天的同步日志会以日期命名,存到# 先确保日志目录存在,第一次运行可以手动创建:mkdir -p /volume1/backup/rsync_logs rsync -avz --delete ubuntu@192.168.1.100:/var/www/html/ /volume1/backup/server_data/ >> /volume1/backup/rsync_logs/backup_$(date +%Y%m%d).log 2>&1/volume1/backup/rsync_logs目录下。 - 点击「确定」完成任务创建,你也可以右键任务选择「立即运行」,测试定时任务是否能正常执行。
备注:内容来源于stack exchange,提问作者Dr. Gianluigi Zane Zanettini




