使用 sshfs 挂载远程文件系统
在两台服务器间借助 SSH 连接使用 SFTP 或 SCP 可以互相传输文件,但这确不能共享整个文件系统。当我们想要像访问本地服务器的文件系统一样访问远程服务器的文件系统时,可以使用 sshfs 工具,它通过 SSH 文件传输协议 (SFTP) 挂载远程的文件系统。本篇以 ubuntu 系统为例,所有代码以普通用户运行,部分代码需要 sudo 权限。
安装
| 1 | sudo apt update | 
挂载远程服务器文件系统
假设本地的用户 jinzhongxu 能够通过 SSH 连接到远程服务器 tencent.test.com
| 1 | # 创建挂载点 | 
注意,挂载时因为指定了 reconnect 会断网自动重连;指定了 allow_other,就像普通的磁盘挂载一样。sshfs 默认情况下会阻止这种情况,所以建议带上该参数,否则将导致除 root 用户外其他用户无法访问文件系统。同时,指定该参数,需要在配置文件中放开权限,方法如下:
| 1 | sudo vim /etc/fuse.conf | 
修改为如下:
| 1 | # /etc/fuse.conf - Configuration file for Filesystem in Userspace (FUSE) | 
当挂载成功后,访问 /mnt/tencent 即可访问远程服务器 tencent.test.com 里的 /home/jinzhongxu 文件。
查看挂载情况
| 1 | df -hT | 
有时,挂载的目录所有者为 nobody,所属组为 nogroup,我们可以使用下面的方法,改变所有者和所属组,假设所有者是jinzhongxu(uid=1000),所属组是 jinzhongxu (gid=1000),uid 和 gid 的查看方法为 id jinzhongxu:
| 1 | sshfs -o rw,default_permissions,allow_other,uid=1000,gid=1000,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 jinzhongxu@tencent.test.com:/home/jinzhongxu /mnt/tencent | 
卸载
| 1 | fusermount -u /mnt/tencent | 
永久挂载
上面的挂载方法通过 SSH 来实现,当连接断开后则挂载失效。因此,SSHFS 可以作为一种灵活的、临时的挂载方法。但想要永久挂载,可以进行如下配置来实现。
| 1 | sudo vim /etc/fstab | 
在最后一行添加如下内容
| 1 | sshfs#jinzhongxu@tencent.test.com:/home/jinzhongxu /mnt/tencent fuse.sshfs noauto,x-systemd.automount,_netdev,reconnect,identityfile=/home/jinzhongxu/.ssh/id_rsa,port=2222,allow_other 0 0 | 
更新 fstab 文件使修改生效
| 1 | sudo mount -a | 
参考文献
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J. Xu!
 评论









