SSHFS,SSH Filesystem, 是一种采用 SFTP连接来挂载远程服务器或工作站上的目录和文件交互的工具. 一般情况下,大部分 SSH 服务器支持 SFTP 访问.
1. 使用场景
[1] - 本机访问远程服务器目录与文件;
[2] - 多台服务器之间目录与文件的访问.
Ubuntu - 挂载 NFS 服务器的文件系统到本机 - AIUAI 挂载服务器所分享的目录.
2. Ubuntu 安装
[1] - Ubuntu apt 安装:
sudo apt-get install sshfs
版本可能比较早,如:
sshfs --version
#SSHFS version 2.5
#FUSE library version: 2.9.4
#fusermount version: 2.9.4
#using FUSE kernel interface version 7.19
[2] - 源码安装
#下载最新源码
#https://github.com/libfuse/sshfs/releases
wget https://github.com/libfuse/sshfs/releases/download/sshfs-3.5.2/sshfs-3.5.2.tar.xz
#解压
tar xvf sshfs-3.5.2.tar.xz
#编译安装推荐采用 Meson>0.38 和 Ninja
#http://mesonbuild.com/
#https://ninja-build.org/
cd sshfs-3.5.2
mkdir build
cd build
#默认参数进行编译
meson ..
#修改编译参数
mesonconf # list options
mesonconf -D strip=true # set an option
#安装
ninja
python3 -m pytest test/ # optional, but recommended
sudo ninja install
或者可以试试:
wget https://github.com/libfuse/sshfs/archive/sshfs-3.5.2.zip
unzip sshfs-3.5.2.zip
cd sshfs-3.5.2
./configure
make -j4
make install
3. 使用方法
3.1. 远程(mount)服务器目录挂载
sshfs [user@]hostname:[directory] mountpoint
sshfs [服务器用户名]@服务器ip地址:[挂载目录] [本地挂载点]
#如:
sshfs username@192.168.1.10:/path/to/test/ mountpoint
sudo sshfs -o allow_other,default_permissions username@192.168.1.10:/path/to/test/ mountpoint
(1) - 推荐不采用 root 用户使用 SSHFS. 挂载的目标位置必须是属于 user 的.
(2) - 如果 user 参数忽略,SSHFS 会使用本地用户名(local username).
(3) - 如果 directory 参数忽略,SSHFS 会使用远程服务器的 home 目录路径.
(4) - 类似于 SSH, SSHFS 可能要求输入密码.
3.2. 挂载时自动输入密码
如:
sshfs -o ssh_command='sshpass -p 123456 ssh' -o cache=yes, allow_other [user@]hostname mountpoint
3.3. 卸载(unmont)服务器目录(文件系统)
fusermount -u mountpoint
如果出现 Device or resource busy
问题,则采用:
fusermount -zu mountpoint
3.4. 持久性挂载
类似于硬盘挂载,将配置写入 /etc/fstab
.
如:
username@hostname:/path/to/test/ mountpoint fuse.sshfs noauto,x-systemd.automount,_netdev,reconnect,identityfile=/home/username/.ssh/id_rsa,allow_other,default_permissions 0 0
其中,
fuse.sshfs
- 指定挂载远程目录的驱动noauto,x-systemd.automount,_netdev,reconnect
- 参数组合,确保持久性挂载的网络驱动工作正常,以避免网络连接从本地计算机或远程计算机断开.identityfile=/home/username/.ssh/id_rsa
- 指定本地 SSH key 路径,使得远程路径能够被自动挂载.allow_other,default_permissions
0 0
- 表示远程文件系统不因报错而被本地计算机丢弃或检验
4. 查看 sshfs 参数
sshfs --help
如:
通用参数:
-o opt,[opt...] mount options
-h --help print help
-V --version print version
SSHFS 参数:
-p PORT 等价于 '-o port=PORT'
-C 等价于 '-o compression=yes'
-F ssh_configfile 指定 ssh 配置文件
-1 等价于 '-o ssh_protocol=1'
-o reconnect reconnect to server
-o delay_connect delay connection to server
-o sshfs_sync synchronous writes
-o no_readahead synchronous reads (no speculative readahead)
-o sync_readdir synchronous readdir
-o sshfs_debug print some debugging information
-o cache=BOOL enable caching {yes,no} (default: yes)
-o cache_timeout=N sets timeout for caches in seconds (default: 20)
-o cache_X_timeout=N sets timeout for {stat,dir,link} cache
-o workaround=LIST colon separated list of workarounds
none no workarounds enabled
all all workarounds enabled
[no]rename fix renaming to existing file (default: off)
[no]nodelaysrv set nodelay tcp flag in sshd (default: off)
[no]truncate fix truncate for old servers (default: off)
[no]buflimit fix buffer fillup bug in server (default: on)
-o idmap=TYPE user/group ID mapping, possible types are:
none no translation of the ID space (default)
user only translate UID of connecting user
file translate UIDs/GIDs contained in uidfile/gidfile
-o uidfile=FILE file containing username:remote_uid mappings
-o gidfile=FILE file containing groupname:remote_gid mappings
-o nomap=TYPE with idmap=file, how to handle missing mappings
ignore don't do any re-mapping
error return an error (default)
-o ssh_command=CMD execute CMD instead of 'ssh'
-o ssh_protocol=N ssh protocol to use (default: 2)
-o sftp_server=SERV path to sftp server or subsystem (default: sftp)
-o directport=PORT directly connect to PORT bypassing ssh
-o slave communicate over stdin and stdout bypassing network
-o disable_hardlink link(2) will return with errno set to ENOSYS
-o transform_symlinks transform absolute symlinks to relative
-o follow_symlinks follow symlinks on the server
-o no_check_root don't check for existence of 'dir' on server
-o password_stdin read password from stdin (only for pam_mount!)
-o SSHOPT=VAL ssh options (see man ssh_config)
FUSE options:
-d -o debug enable debug output (implies -f)
-f foreground operation
-s disable multi-threaded operation
-o allow_other allow access to other users
-o allow_root allow access to root
-o auto_unmount auto unmount on process termination
-o nonempty allow mounts over non-empty file/dir
-o default_permissions enable permission checking by kernel
-o fsname=NAME set filesystem name
-o subtype=NAME set filesystem type
-o large_read issue large read requests (2.4 only)
-o max_read=N set maximum size of read requests
-o hard_remove immediate removal (don't hide files)
-o use_ino let filesystem set inode numbers
-o readdir_ino try to fill in d_ino in readdir
-o direct_io use direct I/O
-o kernel_cache cache files in kernel
-o [no]auto_cache enable caching based on modification times (off)
-o umask=M set file permissions (octal)
-o uid=N set file owner
-o gid=N set file group
-o entry_timeout=T cache timeout for names (1.0s)
-o negative_timeout=T cache timeout for deleted names (0.0s)
-o attr_timeout=T cache timeout for attributes (1.0s)
-o ac_attr_timeout=T auto cache timeout for attributes (attr_timeout)
-o noforget never forget cached inodes
-o remember=T remember cached inodes for T seconds (0s)
-o nopath don't supply path if not necessary
-o intr allow requests to be interrupted
-o intr_signal=NUM signal to send on interrupt (10)
-o modules=M1[:M2...] names of modules to push onto filesystem stack
-o max_write=N set maximum size of write requests
-o max_readahead=N set maximum readahead
-o max_background=N set number of maximum background requests
-o congestion_threshold=N set kernel's congestion threshold
-o async_read perform reads asynchronously (default)
-o sync_read perform reads synchronously
-o atomic_o_trunc enable atomic open+truncate support
-o big_writes enable larger than 4kB writes
-o no_remote_lock disable remote file locking
-o no_remote_flock disable remote file locking (BSD)
-o no_remote_posix_lock disable remove file locking (POSIX)
-o [no_]splice_write use splice to write to the fuse device
-o [no_]splice_move move data while splicing to the fuse device
-o [no_]splice_read use splice to read from the fuse device
Module options:
[iconv]
-o from_code=CHARSET original encoding of file names (default: UTF-8)
-o to_code=CHARSET new encoding of the file names (default: UTF-8)
[subdir]
-o subdir=DIR prepend this directory to all paths (mandatory)
-o [no]rellinks transform absolute symlinks to relative