scp传文件到群晖报文件不存在?先查协议

场景

运维的日常操作:把备份脚本、证书、安装包用scp推到群晖上。命令敲下去,终端回一句「No such file or directory」,回头ls一看,目标目录明明好好在那儿。很多人第一反应是NAS出了问题,其实大概率是客户端这边变了。

先弄清一件事:新版scp换了协议

OpenSSH 9.0开始,scp默认改走SFTP协议,不再用传统的SCP/RCP协议。两套协议对路径的解析、对符号链接和引号转义的处理不一样,很多以前能正常跑通的写法,客户端一升级就开始报「文件不存在」。这不是群晖的问题,是scp自己的行为变了,理解了这一点,排查方向就清楚了。

逐条排查

第一条,路径写全。目标路径别用相对路径,直接写绝对路径:

scp file.tar.gz root@192.168.1.10:/volume1/backup/

群晖的共享文件夹都挂在/volume1下面,别凭感觉写/home或/data这种猜出来的路径。

第二条,路径带空格或特殊字符的,本地和远端都要加引号:

scp "my file.zip" "root@192.168.1.10:/volume1/backup 2026/"

第三条,强制走老协议试试。给scp加 -O 参数:

scp -O file.tar.gz root@192.168.1.10:/volume1/backup/

-O 的作用是让scp退回传统SCP协议,绕开SFTP的行为差异。不少「昨天还好好的、今天突然报错」的案例,加 -O 立刻恢复——典型的客户端升级触发。

第四条,确认目标目录对登录账号有写权限。另外注意DSM 7.0起,SSH登录只允许管理员群组的账号,普通账号连不上会报权限类错误,别和路径问题混为一谈;用域或LDAP账号登录时,还要注意家目录服务是否启用,否则连落点目录都不存在。

第五条,嫌命令行折腾,直接用图形工具走SFTP,比如WinSCP或FileZilla,端口22,效果等同。群晖这边要开对应服务:SSH在 控制面板 > 终端机和SNMP 里启用;SFTP在 控制面板 > 文件服务 > FTP > SFTP 里启用。

顺带一句安全

SSH和SFTP是双刃剑,日常用完建议关掉,至少不要对公网开放;确实需要长期开的,配合自动封锁和两步验证一起上,把暴露面压下来。

写在最后

一个 -O 参数、一条绝对路径,能解决九成的scp报错。群晖这类存储后端的日常运维琐碎事,贵州诚鑫致达科技常年帮企业客户打理,脚本、传输、备份一条线都能接,要聊搜「诚鑫致达」。