如何在Synology NAS本地执行Raspberry Pi上的.sh脚本?
解决方案:在Synology NAS本地执行Raspberry Pi上存储的脚本
我完全理解你的需求——你希望在Synology NAS(MachineA)上本地运行存储在Raspberry Pi(MachineB)里的脚本,而不是通过SSH让脚本在Pi端执行。之前的ssh pi@192.168.1.2 "/usr/local/bin/nas/script1.sh"命令之所以是远程执行,是因为SSH默认会将后续命令发送到远端机器运行。结合你的安全需求(密钥存于Pi的加密文件夹、避免密钥泄露),下面是两个可行的方案:
方案1:通过SSH传输脚本内容并本地执行
这个方法不需要挂载远程目录,直接通过SSH让Pi把脚本内容传输到NAS,由NAS本地的Shell执行。
执行命令如下:
ssh pi@192.168.1.2 'cat /usr/local/bin/nas/script1.sh' | bash
关键说明:
- 这个命令的逻辑是:让Pi读取脚本内容并通过标准输出传递,NAS端用
bash接收内容并本地执行,脚本的所有操作都会在NAS上完成,脚本文件仍存储在Pi中。 - 为了自动化执行(比如NAS开机时自动运行),需要设置NAS到Pi的免密SSH登录:
- 在NAS上生成SSH密钥对:
ssh-keygen -t ed25519(一路回车即可,不设密码) - 将NAS的公钥复制到Pi的授权列表:
ssh-copy-id pi@192.168.1.2
- 在NAS上生成SSH密钥对:
- 确保Pi上的用户
pi有读取该脚本文件的权限。
方案2:将Pi上的脚本目录挂载到NAS本地
通过NFS或Samba将Pi上存放脚本的目录共享给NAS,NAS挂载后即可像执行本地脚本一样运行目标文件,更符合你“本地运行远程存储脚本”的直观需求。
步骤示例(以NFS为例):
在Pi上配置NFS共享:
- 安装NFS服务:
sudo apt-get install nfs-kernel-server - 编辑NFS配置文件:
sudo nano /etc/exports,添加一行:
(将/usr/local/bin/nas 192.168.1.0/24(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)192.168.1.0/24替换为NAS所在的IP段,权限按需调整,确保仅NAS能访问) - 重启NFS服务:
sudo systemctl restart nfs-kernel-server
- 安装NFS服务:
在Synology NAS上挂载NFS共享:
- 打开DSM的「文件服务」,确保NFS服务已启用
- 进入「控制面板」→「文件共享」→「新增」,选择「远程NFS共享」,按照向导输入Pi的IP和共享路径完成挂载
- 挂载完成后,即可通过NAS上的挂载路径执行脚本:
/volumeX/pi_script_share/script1.sh(volumeX为NAS的存储卷)
安全注意事项:
- 确保Pi上存放脚本的目录位于加密分区,且已配置好被盗时自动卸载的触发机制(比如通过脚本检测异常断电或物理位移信号,自动卸载加密分区)
- NFS共享仅允许NAS的特定IP访问,避免其他设备连接
额外建议
- 无论选择哪个方案,都要先手动测试命令/挂载流程,确保能正常执行挂载加密文件夹的操作
- 将执行脚本的命令添加到Synology DSM的「任务计划」中,设置为开机时自动运行,实现挂载流程的自动化
内容的提问来源于stack exchange,提问作者Se Sei




