SSHFS - 挂载远程目录到本地机器
背景
本文介绍了如何在 Linux 和 Windows 操作系统下,使用 sshfs
命令将远程 UNIX
服务器目录挂载到本地机器之后,便可以把远程文件当作本地文件用,这尤其适合服务版操作系统无桌面环境,无显示器,或者云原生的场景。
Linux
sudo apt install sshfs
sudo sshfs $remote_user@$remote_host:/$remote_dir/ /$local_dir/ \
# SSH 连接配置:用户权限
-o default_permissions,allow_other,uid=$(id -u),gid=$(id -g),idmap=user,\
# 连接保活
ServerAliveInterval=15,ServerAliveCountMax=10,
# SSH 端口,SSH 连接私钥
port=$remote_port,identityfile=$local_identity_file
上面的命令中有几个必要元素:
-
$remote_user
: 远程的连接用户;🚨 敬告
请注意以下文件或目录的权限:
-
.ssh
应为 `700`` -
authorized_keys
则为600
-
用户主目录
/home/remote_user/
默认为755
,建议改为750
或700
,过于宽泛的权限会导致 SSHD 报安全隐患而无法使用公钥连接。
mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys chmod 700 /home/$USER
-
remote_host
: 远程服务器的 IP 或 域名;remote_dir
: 远程目录,如原始数据目录,输出结果目录等;local_dir
:想要把远程目录挂载到哪里,Linux 建议是/mnt/
下的目录;remote_port
: 远程端口,某些服务器可能修改了默认端口;local_identity_file
: 私钥地址;🔔 注意
请确保已经把本地私钥所搭配的公钥放到远程用户的
.ssh/authorized_keys
文件中。
命令行配置开机自动连接
修改 /etc/fstab
文件,在开机启动时,文件系统根据以下配置自动连接远程目录:
$ sudo vim /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=1b815bb1-f6ae-4a94-a466-886e3fa52aa2 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=D4B0-9498 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
# 下面这行为新增项,请替换以下变量,包括 uid 和 gid。
remote_user@remote_host:/remote_dir/ /local_dir/ fuse.sshfs default_permissions,user,delay_connect,reconnect,allow_other,uid=1000,gid=1000,idmap=user,ServerAliveInterval=15,ServerAliveCountMax=10,identityfile=local_identity_file,port=remote_port 0 0
挂载后,可用 mount
命令查看当前的挂载项:
$ sudo sshfs [email protected]:/media/datum /mnt/datum -o default_permissions,allow_other,uid=$(id -u),gid=$(id -g),idmap=user,ServerAliveInterval=15,ServerAliveCountMax=10,port=22,identityfile=$local_identity_file
$ ls -al /mnt/datum/
total 64
drwxrwxrwx 1 muwaii muwaii 4096 Mar 29 13:44 .
drwxr-xr-x 3 root root 4096 Apr 18 11:10 ..
drwxrwxr-x 1 muwaii muwaii 4096 Aug 3 2022 project_datum
$ sudo mount | grep "192.168.123.123"
[email protected]:/media/datum on /mnt/datum type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
Windows
在 Windows 下,用 SSH 协议挂载 Linux 下主机目录,可使用 sshfs-win
。
- 安装最新版本的 WinFsp
用途:可以简单理解成一个中间层,将 Linux 文件系统(比如ext4
)抽象成 Windows NTFS 文件系统的盘符,以支持复制,拷贝,粘贴,删除文件,查看文件元信息,查看磁盘容量等操作。 - 安装最新版本的 SSHFS-Win
用途:sshfs
命令的 Windows 版实现,负责通信协议。 - 安装最新版本的 SSHFS-Win-Manager
用途:图形界面,操作直观,支持公钥,一键连接/断开。
挂载后就可以在资源管理器中看到新的盘符:
界面配置开启自动连接
总结
通过 sshfs
命令,我们可以很方便地将远程路径挂载到本地的目录或盘符,所见即所得,所操作文件的变更自动同步到远程机器,不用手动通过 sftp
或 scp
,rsync
回传,特别适合查看远程服务器的图片或视频输出,本地编辑远程调试/运行,临时挂载大数据集等场景。
在楼主基础上补充一下:
Windows 微软自带的网络磁盘映射 (Map Network Driver) 也挺好用的,不过要遵循其规定的一套路径语法,称之为 VNC Syntax。若不需要使用私钥就能登录服务器的话,它可以自动记住密码,开机自动映射,内网使用体验还不错。
当然,论可玩性,扩展性或可自定义程度,与第三方工具肯定没法比咯~
\\sshfs.r\REMUSER@HOST[\PATH]