【参考网页资料】
It's possible to mount filesystem on another Host via SSH with SSHFS
零、准备
[1]	Install fuse-sshfs.
root@dlp:~ # pkg install -y fusefs-sshfs
root@dlp:~ # vi /boot/loader.conf
# add to last line
fusefs_load="YES"
root@dlp:~ # vi /etc/sysctl.conf
# add to last line
vfs.usermount=1
root@dlp:~ # reboot
[2]	Try to use SSHFS with any user.
For example, [freebsd] user mounts [/home/freebsd/work] on [node01.srv.world] to local [~/sshmnt].
freebsd@dlp:~ $ mkdir ~/sshmnt
# mount with SSHFS
freebsd@dlp:~ $ sshfs node01.srv.world:/home/freebsd/work ~/sshmnt
(freebsd@node01.srv.world) Password for freebsd@node01.srv.world:   # password of the user
freebsd@dlp:~ $ df -hT /home/freebsd/sshmnt
Filesystem                           Type            Size    Used   Avail Capacity  Mounted on
node01.srv.world:/home/freebsd/work  fusefs.sshfs     26G    212K     26G     0%    /home/freebsd/sshmnt
# mounted
# for unmount, do like follows
freebsd@dlp:~ $ umount ~/sshmnt
一、配置sshd服务
1.安装fusefs-sshfs
pkg install -y fusefs-sshfs
2.被共享主机新建共享权限用户
adduser 
Username: sshfs
Full name: 
Uid (Leave empty for default): 
Login group [sshfs]: 
Login group is sshfs. Invite sshfs into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: 
Home directory [/home/sshfs]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: yes
Use an empty password? (yes/no) [no]: no
Use a random password? (yes/no) [no]: no
Enter password: 
Enter password again: 
Lock out the account after creation? [no]: no
Username   : sshfs
Password   : *****
Full Name  : 
Uid        : 1001
Class      : 
Groups     : sshfs 
Home       : /home/sshfs
Home Mode  : 
Shell      : /bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (sshfs) to the user database.
Add another user? (yes/no): no
Goodbye!
3.修改被挂载主机sshd配置文件
vim /etc/ssh/sshd_config
具体修改如下:
# 打开22端口
Port 22 
# 允许密码登录
PasswordAuthentication yes
# 不允许空密码
PermitEmptyPasswords no
4.安全防护只允许特定IP SSH(非必须)
 vim /etc/hosts.allow
添加:
AllowUsers mamadotal@192.168.1.32
5.启动sshd服务
sysrc sshd_enable="YES"
service sshd restart
二、远程挂载文件系统
当你在 Linux 环境下挂载一个远程文件系统时,你首先需要一个空目录来挂载它。大多数 Linux 环境包括一个叫做/mnt 的目录,如果你需要需要一个空目录,可以在其中创建子目录。 注意:在 Windows 上,远程文件系统有时会用自己的盘符(如 G:)来挂载,而在Mac上,它们通常被挂载在 /Volumes 目录下。 使用 mkdir 命令在 /mnt 中创建一个名为 droplet 的子目录:
$ sudo mkdir /mnt/droplet
现在你可以使用 sshfs 挂载一个远程目录了:
$ sudo sshfs -o allow_other,default_permissions sammy@your_other_server:~/ /mnt/droplet
这个命令的各个选项表现如下:
- -o出现在各种挂载选项之前(这一点与通常用于非 SSH 的磁盘挂载的- mount命令相同)。在这个例子中,你使用 allow_other 来允许其他用户访问这个挂载(这样它就像一个正常的磁盘挂载,因为- sshfs默认是不允许这样做的),还有- default_permissions(这样它就使用普通的文件系统权限)。
- sammy@your_other_server:~/提供到远程目录的完整路径,包括远程用户名- sammy、远程服务器- your_other_server和路径,在这里- ~/为远程用户的主目录。这与 SSH 或 SCP 使用的语法相同。
- /mnt/droplet 是被用作装载点的本地目录的路径。 如果你收到这样一条信息:Connection reset by peer,请确保你已经把你的 SSH 密钥复制到了远程系统。sshfs在后台使用一个普通的 SSH 连接,如果这是你第一次通过 SSH 连接到远程系统,你可能被提示接受远程主机的密钥指纹。
Output
The authenticity of host '164.90.133.64 (164.90.133.64)' can't be established.
ED25519 key fingerprint is SHA256:05SYulMxeTDWFZtf3/ruDDm/3mmHkiTfAr+67FBC0+Q.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? Yes
注意:如果你在不使用 sudo 权限的前提下用SSHFS挂载一个远程目录,你可以使用 sudo groupadd fuse在你的本地机器上创建一个名为 fuse 的用户组,然后使用sudo usermod -a -G fuse sammy将你的本地用户加入该组。 你可以使用 ls 来列出挂载目录中的文件,看它们是否与远程目录的内容相匹配。
$ ls /mnt/droplet
Output
remote_file1 remote_file2
现在你就可以处理远程服务器上的文件了,就像把远程服务器当做一个连接到本地机器的物理设备一样。例如,如果你在/mnt/droplet 目录下创建一个文件,该文件将出现在你的虚拟服务器上。同样,你可以把文件复制到 /mnt/droplet文件夹中或从该文件夹中复制出来,它们将在后台上传到你的远程服务器或从你的远程服务器上传。 值得注意的是,mount命令只是为你当前的会话挂载远程磁盘。如果虚拟服务器或本地机器关机或重启,你将需要使用相同的过程来再次挂载它。 如果你不再需要这个挂载,你可以用 umount 命令卸载它:
$ sudo umount /mnt/droplet
三、永久挂载远程文件系统
与其他类型的磁盘和网络挂载一样,你可以使用 SSHFS 配置一个永久挂载。要做到这一点,你需要在一个名为 /etc/fstab 的文件中添加一个配置项,该文件会在启动时处理 Linux 文件系统挂载。 使用 nano 或你喜欢的文本编辑器打开/etc/fstab:
$ sudo nano /etc/fstab
在该文件的末尾,添加一个这样的条目:/etc/fstab
sammy@your_other_server:~/ /mnt/droplet fuse.sshfs noauto,x-systemd.automount,_netdev,reconnect,identityfile=/home/sammy/.ssh/id_rsa,allow_other,default_permissions 0 0
永久挂载通常需要一些不同的选项来确保它们的行为符合预期。选项表现如下:
- sammy@your_other_server:~/还是远程路径,就像以前一样。
- /mnt/droplet还是本地路径。
- fuse.sshfs指定了用于挂载这个远程目录的驱动。
- noauto,x-systemd.automount,_netdev,reconnect是一组选项,它们共同作用于网络驱动器的永久挂载,以确保在本地机器或远程机器的网络连接断开的情况下表现得“优雅(即让用户无感知)”。
- identityfile=/home/sammy/.ssh/id_rsa指定一个本地 SSH 密钥的路径,这样远程目录就可以自动挂载。注意,这个例子假设你的本地和远程用户名都是 sammy——这里指的是本地路径。指定本地 SSH 密钥路径是必要的,因为- /etc/fstab实际上是以 root 身份运行的,而且这样才能知道哪个用户名的 SSH 配置要检查远程服务器所信任的密钥。
- allow_other,default_permissions使用与上面- mount命令相同的权限。
 -- 0 0标志着远程文件系统在出现错误时不应被本地机器转储或验证。在挂载本地磁盘时,这些选项可能有所不同。 保存并关闭该文件。如果你使用的是 nano,按 Ctrl+X,然后在提示时按 Y,再按 ENTER。然后你可以通过重启你的本地机器来测试- /etc/fstab的配置,例如使用- sudo reboot now,并验证挂载是否被自动重新创建。 应该注意的是,永久的 SSHFS 挂载不一定总是受欢迎的选择。SSH 连接和 SSHFS 的性质意味着它通常更适合于临时的、一次性的解决方案,而 SMB 或 NFS 挂载的配置可能会有更多冗余和其他选项。也就是说,SSHFS 非常灵活,更重要的是,它作为一个成熟的文件系统驱动,允许你在- /etc/fstab中像配置其他磁盘挂载一样配置它,并根据需要使用它。不过要小心,不要意外通过 SSH 暴露出你不想暴露的那些远程文件系统。