事情是这样的。
今天又在服务器上改一份配置,本地编辑器里改着舒服,结果文件在远端。来回 scp,改一行传一次,传完再 ssh 上去看一眼日志。来回两趟人就烦了。
我寻思了一下:能不能让远端那个目录,直接出现在我本机某个路径里?本地打开、保存,实际落在服务器上。摸到 SSHFS(SSH Filesystem,SSHFS)之后试了下,还行,至少把「改配置 / 瞄日志」这类小事从拷文件地狱里捞出来了。所以记一笔,分享给也经常 SSH 上机器抠文件的朋友。
它干的事其实就一件:走安全外壳协议(Secure Shell,SSH)里的 SSH 文件传输协议(SSH File Transfer Protocol,SFTP),再借用户态文件系统(Filesystem in Userspace,FUSE)把远程目录挂到本机路径。多数 OpenSSH 默认就开着 SFTP,服务器那边通常不用再装东西、也不用再开端口。
段末注释:SSHFS 指「SSH 文件系统」客户端;FUSE 指在用户态做文件系统挂载;SFTP 是跑在 SSH 通道上的文件访问协议(不是 FTP 的加密版)。后文沿用缩写。
回到开头那个痛:远端有文件,本地想当普通文件夹用。SSHFS 就是冲这个来的。
我觉得适合啥时候用
你如果也经常 SSH 上机器,下面这些场景,我自己用下来觉得挺对口:
- 本机 IDE / 编辑器直接打开远端项目或配置目录,改几处就跑,不想整仓同步下来。
- 临时挂到
~/mnt/...,拖两下文件,或者丢给本地小脚本瞄一眼。 - 防火墙只放行 SSH,NFS / Samba 那种共享盘申请不动、也懒得申请。
- 本机用普通用户挂就行,挂载点目录归自己,不必动不动 sudo。
舒适区就四个词:偶发、交互式、已有 SSH、能忍一点网络延迟。再大再重的活,往下看「别用」。
啥时候我建议你别用
这块需要注意一下,我自己也踩过预期管理的坑:
| 你其实想干的事 | 我更愿意换的方向 |
|---|---|
| 大批量、可重复拷贝 / 增量同步 | rsync 这类传输工具 |
| 局域网长期共享、多人同时写 | NFS、SMB(要动服务端) |
WAN 上对着巨大目录狂 ls、扫元数据 |
先同步到本地,或换延迟更可控的方案 |
| 当生产数据盘,断网也不能含糊 | 别指望 SSHFS |
| 指望社区天天修边角 bug | 官方现在偏维护向,别幻想「提 issue 必回」 |
说真的,发行版里到处能装到它,用的人也多。但坦率的讲,当前贡献节奏不猛,已知问题一堆。长期当核心依赖之前,你自己心里要有 B 计划。
原理就这一小截
真要知道故障大概出在哪,看这条链就够了:
1 | 本机应用 → 本地路径(FUSE 挂载点) |
stat、列目录这类动作,往往就是一次网络往返。局域网还好;链路一慢、目录一大,体感会劝退。这不是你没调优,是这玩法天生带延迟税。扣回主线:它解决的是「路径语义」,不是「把网盘变成本地盘」。
我怎么装、怎么挂上
安装
1 | Debian / Ubuntu |
当然也可以源码安装
1 | git clone https://gitcode.com/gh_mirrors/ss/sshfs |
包名以你发行版为准。Windows 原生体验一般,我会改用 SFTP 客户端、WSL 里的 sshfs,或者 IDE 远程开发,不强求本机硬挂。
挂载
1 | mkdir -p ~/mnt/remote-proj |
常用变体:
1 | sshfs -o port=2222 user@host:/data ~/mnt/remote-proj |
卸载
1 | Linux 常见 |
编辑器还开着挂载点里的文件时,卸载会失败。先关占用,再卸。这个事儿我也烦过 = =
真用起来我会加的几个选项
笔记本一休眠、Wi-Fi 闪一下,默认挂载很容易留个「假活」的挂载点,点进去无响应。交互式用的时候,我会带上保活和重连:
1 | sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 \ |
- 保活:让 SSH 更早发现死连接。
reconnect:断了会尝试重连。注意,这不等于本地盘那种事务保证,偶发还是得手动卸了重挂。- 压缩、加密套件可以继续在
ssh_config/-o里抠;WAN 上开压缩未必更快,我自己是有空再测,没空就默认。
/etc/fstab 自动挂?可以,但要密钥登录,还要防开机卡死。固定内网机子或许值得;笔记本移动办公,我更愿意手动或丢个小脚本。
跟别的办法怎么挑
| 方案 | 服务端额外折腾 | 形态 | 我啥时候会选 |
|---|---|---|---|
| SSHFS | 通常不用 | 挂成路径 | 临时编辑、浏览、小规模读写 |
| scp / sftp 客户端 | 不用 | 拷贝 / 会话浏览 | 传一次就完,不需要路径语义 |
| rsync | 不用(守护进程可选) | 同步镜像 | 批量、增量、反复搬 |
| NFS / SMB | 要配 | 真共享盘 | 局域网、长期、多客户端 |
| IDE Remote 等 | 不用 | 编辑器里远程开 | 主要写代码,很少让任意本地程序碰挂载点 |
口诀我自己记的是:要「像本地路径」又改不动服务端 → 先试 SSHFS;要「搬数据」→ rsync;要「多人长期盘」→ NFS/SMB。不是谁吊打谁,是场景不对齐。
限制、风险、我不确定的
- 大目录列举、递归扫盘,元数据请求会炸延迟,WAN 上可能慢到你怀疑人生。
- 多个人同时写同一棵树,别默认它跟专用网络盘一样稳。
- 断线后挂载点可能假死,需要
fusermount -u/umount;lazy 卸载能救急,但动手前想清楚。 - 维护状态以 libfuse/sshfs 为准。我说「偏维护向」是看 README 和 issue 氛围得出的印象,具体版本你以仓库为准。
- 流量走 SSH,安不安全取决于你的 SSH 怎么配。官方有个
directport直连玩法,明文,只适合本机或受控网实验,别对着公网开。
有些边角我自己也没全跑通,不确定的地方我就不装懂。
收个尾
已经能 SSH、又只是想让本机工具直接啃远端某一棵目录树——我觉得 SSHFS 值得一试,部署轻、心智负担小。
请你把它当成「临时接出来的远端文件夹」,别当成「可靠网盘」。一旦变成大批量同步、低延迟共享、或多写者生产数据,换 rsync 或 NFS/SMB,别跟自己过不去。
资料: