sshfs
sshfs教程
在linux或mac上,加载远程Linux服务器上的文件目录
[TOC]
安装
需依次安装以下三软件
macfuse
功能:使mac可用读取linux、windows的文件系统,应用于:
- mac读写它们的U盘/移动硬盘
- mac加载服务器上文件目录
sshfs
功能:从Mac加载Linux服务器上的文件目录
- 依赖于macfuse
- 只有命令行
macfusion
功能:sshfs的图形界面
官网已不再维护该软件,其版本不支持OSX Serria及以上系统
可用的fork版本: 我已验证,其Sierra Pre-release 3
版本,OSX Serria和OSX Hgih Serria可用
更新
升级Mojave后使用sshfs要求升级FUSE
编辑文章
升级Mojave后,使用sshfs挂载远程目录失败,弹出对话框显示报错
Unsupported macOS Version FuseThe installed version of FUSE is too old for the operating system. Please upgrade your FUSE installation to one that is compatible with the currently running version of macOS.
尝试在系统偏好设置中升级FUSE
打开系统偏好设置
,点FUSE
提示无可用更新,更新失败。
前往osxfuse.github.io下载
前往https://osxfuse.github.io,下载Stable Releases
中的FUSE for macOS 3.8.2
,安装之
而后sshfs可用使用了。
使用
ui用法
sshfs命令行用法
优点:使用此方法挂载后,从一处把笔记本带到另一处,连到另一个网后,挂载依然不断
挂载
sshfs <user>@<host>:<path> <mount_path> -o volname=<volume_name> -C -o reconnect -o transform_symlinks -o follow_symlinks # -o local
-C:压缩,即-o compression=yes
-o reconnect:自动重连
-o transform_symlinks:表示转换绝对链接符号为相对链接符号
-o follow_symlinks:沿用服务器上的链接符号-o local:视为本地磁盘,会在Finder/侧栏/设备 和 桌面 下出现图标名为volume_name
<user>@<host>
可以用~/.ssh/config中的服务器别名- 需先创建空文件夹
<mount_path>
- 若无此文件夹,则不会自动创建,mount失败
- 若非空,mount期间,文件夹中原有的东西看不见了,但umount后又能看见
<mount_path>
与<volume_name>
可以同名
卸挂(二者等效)
法一 用图像界面推出
在Finder中,戳到<mount_path>/..
或MacBook Air
下,右键<mount_path>
,点“推出”
若设了-o local
,还可
-
或在Finder/侧栏/设备/<volume_name> 的右侧有个向上箭头,是推出按钮,按之即推出(推荐)
-
或从桌面/<volume_name>,右键
<mount_path>
,点“推出”
法二 命令推出
umount <mount_path>
# 等效于
fusermount -u <mount_path>
- 在mac是
<fusermount>
命令找不到,但umount
可以用 - 在服务器上,
umount
需要sudo,但fusermount -u
可以用 - 注意不是
unmount
免密
这样子每次挂载的时候,都需要输入密码,可以设置成免密码登录:
将公钥追加到远程服务器:
cat .ssh/id_rsa.pub | ssh username@server "cat - >>.ssh/authorized_keys"
登录:
sshfs username@server:path local_path
umount mount_path
sshfs的bug处理
服务器断连 – “保存路径不存在” / 无法ls (Input/output error) /无法 rm (Operation not permitted)
症状 当 mac 休眠、重启、换了个网络环境,可能与服务器断连(也可能保持连接)
- 在软件(如sublime)里,之前打开的所mount目录下的文件,此时保存文件,会显示“保存路径不存在”
ls
mac上用于mount的文件夹(如/Users/$USER/Desktop/mount/mounted_server
)会报错
ls /Users/$USER/Desktop/mount
# 或
ls /Users/$USER/Desktop/mount/mounted_server
# 返回 ls: cannot access '/Users/$USER/Desktop/mount/mounted_server': Input/output error
rm
mac上用于mount的文件夹,会报错
rm /Users/$USER/Desktop/mount/mounted_server -rf
# 返回 rm: cannot remove '/Users/$USER/Desktop/mount/mounted_server': Operation not permitted
以上症状出现任意一个,说明已经与远处服务器断开连接,但本地未umount
对策 依次做如下操作
- 检查mac的网络连接
- 关掉所有在用mount目录下文件的软件
umount <mount_path>
- 再重新
sshfs <user>@<host>:<path> <mount_path>
有文件在用 – 无法umount (Resource busy)
若显示
umount <mount_path>
或
fusemount -u <mount_path>
# 返回 umount(<mount_path>): Resource busy -- try 'diskutil unmount'
则说明此时mac上仍有软件在打开了所mount的文件夹下的文件
-
法一:关闭软件再安全卸载
-
实时监测哪些进程占用了
<mount_path>
watch -n 0.1 lsof <mount_path> # 按 ctrl+c 结束
-
需在那个软件中,在使用mount的文件夹下的文件的窗口内,
⌘+W
关闭窗口,再umount <mount_path> 或 fusemount -u <mount_path>
可成功
-
若还不行,
⌘+Q
退出整个软件,再umont <mount_path>
或fusemount -u <mount_path>
-
-
法二:强制卸载
sudo umount -l <mount_path>
umount -h:
-l, --lazy detach the filesystem now, clean up things later
此路径没挂载 – 无法umount (not currently mounted)
umount <mount_path> # 返回 umount: local_dir: not currently mounted
说明没有sshfs进程从<mount_path> 挂载。要想在<mount_path> 挂载,直接sshfs <user>@<host>:<path> <mount_path>
即可
此路径已挂载 – 无法mount(is itself on a OSXFUSE volume)
sshfs <user>@<host>:<path> <mount_path>
# 返回 mount_osxfuse: mount point <mount_path> is itself on a OSXFUSE volume
说明此时已有mount进程使用了<mount_path> ,<mount_path> 成为了挂载磁盘
可列出所有在sshfs进程
pgrep -lf sshfs
ls/rm 挂空了的路径 – (Device not configured)
若先前执行了
sshfs <mount_path> :.
然后ctrl-c或进程自动结束,则此时<mount_path>依旧sshfs被占用,称<mount_path>“挂空”
此时ls(或rm) <mount_path>(及其下的路径)
,会返回
ls(或rm): cannot open directory '/Users/$USER/Desktop/mount/': Device not configured
需要umount <mount_path>
,解除sshfs对<mount_path>的占用
而后ls(或rm) <mount_path>
正常返回
需手动杀进程
以上操作均解决不了,则需手动杀sshfs进程
pgrep -lf sshfs
# 会显示你sshfs时的命令,如
# 38371 sshfs -o transform_symlinks -o follow_symlinks <hostname>:/ /Users/$USER/Desktop/mount/mounted_server -o volname=<hostname> -o reconnect -o local
然后杀掉相应的挂载进程
kill -9 <相应的pid >
之后重新挂载响应的目录即可
Macfusion的bug处理
Macfusion显示Failed to Mount
- 检测本机已经联网
- 检查本机mount路径,知否有与所mount盘同名的文件夹(可能是mount该盘,从mac打开其中文件,断开连接后,又保存该文件,从而创建同名文件夹),请将此文件夹改名,再次mount即可成功
- 如仍不行,或见所mount的磁盘图标变成蓝+灰色,而非绿色,则关闭sshfs程序mount此服务器的进程
ps aux | grep <该服务器在Macfision工具栏中的名字>(如cpu4) 或 <usr@server_address>(如someone@some.place.com)
返回
mac 24715 0.6 0.0 4267752 876 s004 S+ 9:08下午 0:00.01 grep --color cpu4
mac 24093 0.0 0.0 729280 1516 ?? S 8:54下午 0:00.08 /Applications/Macfusion.app/Contents/PlugIns/sshfs.mfplugin/Contents/Resources/sshfs-static someone@some.place.com: /Users/$USER/Desktop/mount/cpu4 -p4514 -oNumberOfPasswordPrompts=1 -ocompression=yes -ofollow_symlinks -odefer_permissions -oauto_cache -f -ovolname=cpu4 -ovolicon=/Applications/Macfusion.app/Contents/PlugIns/sshfs.mfplugin/Contents/Resources/sshfs_icon.icns
输入
kill -9 24093
在Macfusion中重新mount该服务器
Macfusion列表全白
需要重启Macfusion——command+Q
只能关闭Macfusiion的前台,无法关闭其后台。重启后台需如下操作:
- 法一 (等效于法二)
killall macfusionAgent
- 法二
ps aux | grep macfusion
返回
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
mac 24105 0.0 0.0 4277992 916 s004 S+ 8:54下午 0:00.01 grep --color macfusion
mac 24090 0.0 0.4 4345112 14996 ?? S 8:54下午 0:00.21 /Applications/Macfusion.app/Contents/Resources/macfusionAgent.app/Contents/MacOS/macfusionAgent
输入
kill -9 24105
重新点开Macfusion的图标
若再次进入目录仍报错、或卸挂失败,需杀掉sshfs之进程:
pgrep -lf sshfs # 列出
pkill -9 sshfs # 杀死
pgrep -lf sshfs # 再列出,若空则杀尽
再重新挂载。
如仍不行
重启mac
为解决的bug
-
显示
点
Mount
后,弹出对话框显示Could not mount filesystem: Mount process has terminated unexpectedly.
Macfusion主界面显示
gpu7 (Failed to Mount)
Edit
Mount
自检:
本机原来gpu7处,没有名为gpu7/的(可见或隐藏)文件夹或磁盘图标
ps aux | grep gpu7
ps aux | grep <server_url>
都显示空killall macfusionAgent
后,从图标重启macfusionAgent.app,然后再mount gpu7,依然上述报错