背景

本文介绍了如何在 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

上面的命令中有几个必要元素:

  1. $remote_user: 远程的连接用户;

    🚨 敬告

    请注意以下文件或目录的权限:

    • .ssh 应为 `700``

    • authorized_keys 则为 600

    • 用户主目录 /home/remote_user/ 默认为 755 ,建议改为 750700,过于宽泛的权限会导致 SSHD 报安全隐患而无法使用公钥连接。

    mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys
    chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
    chmod 700 /home/$USER
  2. remote_host: 远程服务器的 IP 或 域名;
  3. remote_dir: 远程目录,如原始数据目录,输出结果目录等;
  4. local_dir:想要把远程目录挂载到哪里,Linux 建议是 /mnt/ 下的目录;
  5. remote_port: 远程端口,某些服务器可能修改了默认端口;
  6. 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

  1. 安装最新版本的 WinFsp
    用途:可以简单理解成一个中间层,将 Linux 文件系统(比如 ext4)抽象成 Windows NTFS 文件系统的盘符,以支持复制,拷贝,粘贴,删除文件,查看文件元信息,查看磁盘容量等操作。
  2. 安装最新版本的 SSHFS-Win
    用途:sshfs 命令的 Windows 版实现,负责通信协议。
  3. 安装最新版本的 SSHFS-Win-Manager
    用途:图形界面,操作直观,支持公钥,一键连接/断开。

371438431.webp

挂载后就可以在资源管理器中看到新的盘符:

724974349.webp

界面配置开启自动连接

790918723.webp

总结

通过 sshfs 命令,我们可以很方便地将远程路径挂载到本地的目录或盘符,所见即所得,所操作文件的变更自动同步到远程机器,不用手动通过 sftpscprsync 回传,特别适合查看远程服务器的图片或视频输出,本地编辑远程调试/运行,临时挂载大数据集等场景。

仅有一条评论

  1. Rim Rim

    在楼主基础上补充一下:
    Windows 微软自带的网络磁盘映射 (Map Network Driver) 也挺好用的,不过要遵循其规定的一套路径语法,称之为 VNC Syntax。若不需要使用私钥就能登录服务器的话,它可以自动记住密码,开机自动映射,内网使用体验还不错。

    当然,论可玩性,扩展性或可自定义程度,与第三方工具肯定没法比咯~

    \\sshfs.r\REMUSER@HOST[\PATH]

添加新评论