sshfs,可以把ssh连接到的主机资源,映射到本机的文件系统当中,然后用户可以像操作本地文件一样操作,而实际的文件改动将通过ssh传输到远程主机当中。

安装

以下是我在mac系统中利用brew安装sshfs的过程,供大家参考。

brew tap homebrew/fuse #可以使用brew search sshfs查找软件所在的库

# sshfs需要依赖fuse,安装方式如下:
brew cask install osxfuse
# 因为某些原因,安装过程非常慢,程序可能会在下载软件的过程中卡死。
# 我们可以在下载安装过程的输出中获取下载地址:
# https://github.com/osxfuse/osxfuse/releases/download/osxfuse-3.5.8/osxfuse-3.5.8.dmg
# 可以在一些外网服务器上下载,然后scp拷回本地,亲测这个过程快很多,非常稳妥。
# 如果之前的下载过程中途终止,可以查看~/Library/Caches/Homebrew/Cask目录,
# 会发现里面有一个osxfuse--3.5.8.dmg.incomplete文件,删掉这个文件,
# 将自行下载的文件名称改为osxfuse--3.5.8.dmg,然后放到这个目录下。
# 重新执行安装命令,通过输出看到,安装过程检测到文件已经下载,所以就很快了。
# You must reboot for the installation of osxfuse to take effect.
# 输出提示要重启,但我没有重启,好像也可以。

# 安装sshfs
brew install homebrew/fuse/sshfs
# 如果也遇到下载很慢的过程,同样的方法处理
# https://github.com/libfuse/sshfs/releases/download/sshfs_2.8/sshfs-2.8.tar.gz
# 下载sshfs-2.8.tar.gz,放到~/Library/Caches/Homebrew目录下,注意跟上面的目录不同

注:~/Library/Caches/Homebrew是brew用来存放安装过程下载的临时文件的地方。

使用

# 挂载,:后面的dir是远端目录,可以留空,默认是用户home目录,mountpoint是本地挂载路径
sshfs user@hostname:dir mountpoint

# 在本地建立目录server,作为挂载点,dev是可以利用ssh免密登录的服务器
# 执行以下命令成功挂载,server里面就展示出了远端用户目录下的文件
sshfs dev: server

# 卸载
umount server

如果ssh连接未正常关闭,则挂载点会进入一种异常状态,在访问的时候会提示Input/output error,解决方案如下:

ps aux | grep sshfs #先找到sshfs挂载进程的pid
kill -9 pid #强制关闭进程
sudo diskutil umount force mountpoint #强制卸载
# 输出Unmount successful for mountpoint,表示卸载成功

参考链接