SCP向树莓派Home Assistant传文件成功后文件消失是何原因
问题根因
这个异常是Home Assistant OS(原HassIO)的官方SSH/Web Terminal插件的沙箱隔离机制导致的,和常规Linux服务器的SSH运行逻辑有区别:
- 你手动执行
ssh命令发起交互式登录时,插件会自动执行chroot操作,把会话切换到HA的主运行环境,此时你看到的~路径实际是HA系统内的/root目录,手动执行echo创建文件能正常写入、查看,就是因为处于这个chroot后的环境里。 - 但默认配置下,SCP/SFTP走SSH通道建立传输会话时,不会触发上述自动chroot逻辑,传输的文件会被写入SSH插件自身独立沙箱的家目录中,这个沙箱和你交互式登录看到的文件系统完全隔离,自然就会出现「终端显示传输100%成功,登录后找不到文件」的情况。
解决方法
你可以根据自己的需求选下面任意一种方案:
- 直接指定HA持久化目录作为传输目标(最推荐,不需要改配置)
HA的/root目录属于临时存储,系统重启后文件会被清空,日常传文件建议直接指定做了持久化挂载的目录作为SCP目标,不需要走~路径映射,比如要传到配置目录的命令如下:
常用的持久化目录包括scp local_file.txt hassio@homeassistant.local:/config//config(HA核心配置目录)、/share(跨插件共享目录)、/media(媒体文件目录)、/backup(备份目录),传到这些位置的文件重启也不会丢失。 - 开启插件的SCP兼容模式
如果你确实需要用~路径传输、让SCP会话和交互式SSH会话的路径保持一致,可以打开Home Assistant的UI面板,找到「SSH & Web Terminal」插件的配置页,勾选配置项里的Enable SCP选项,保存配置后重启插件,之后再执行SCP传输就会自动触发chroot逻辑,传到~/的文件就能在交互式登录的家目录里看到了。
注意:不要把需要长期留存的文件传到
/root目录,HA系统更新、重启都会清空这个目录下的自定义内容。
内容的提问来源于stack exchange,提问作者kramer65
相关产品推荐
相关产品推荐

