步骤1:在 Linux 系统上安装 SSHFS
默认情况下,sshfs 包不存在所有的主流 Linux 发行版中,你需要在你的 Linux 系统中启用 epel,在 Yum 命令行的帮助下安装 SSHFS 及其依赖。
代码语言:javascript复制# yum install sshfs
# dnf install sshfs 【在 Fedora 22 发行版上】
$ sudo apt-get install sshfs 【基于 Debian/Ubuntu 的系统】
Jetbrains全家桶1年46,售后保障稳定
步骤2:创建 SSHFS 挂载目录
当你安装 SSHFS 包之后,你需要创建一个挂载点目录,在这儿你将要挂载你的远程文件系统。例如,我们在 /mnt/tecmint 下创建挂载目录。
代码语言:javascript复制# mkdir /mnt/tecmint
$ sudo mkdir /mnt/tecmint 【基于 Debian/Ubuntu 的系统】
步骤 3:使用 SSHFS 挂载远程的文件系统
当你已经创建你的挂载点目录之后,现在使用 root 用户运行下面的命令行,在 /mnt/tecmint 目录下挂载远程的文件系统。视你的情况挂载目录可以是任何目录。
下面的命令行将会在本地的 /mnt/tecmint 目录下挂载远程目录 /home/tecmint 。(不要忘了使用你的 IP 地址和挂载点替换 x.x.x.x)。
代码语言:javascript复制命令格式
$ sshfs [user@]host:[dir] mountpoint [options]
$ sshfs myuser@mycomputer:/remote/path /local/path -C -p 9876
参数
-C 启用压缩compress
-p 指定端口为9876
$ sshfs tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint #免密登陆到此即可
$ sudo sshfs -o allow_other tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint
【基于 Debian/Ubuntu 的系统】
如果你的 Linux 服务器配置为基于 SSH 密钥认证,那么你将需要使用如下所示的命令指定私钥。
代码语言:javascript复制# sshfs -o IdentityFile=~/.ssh/id_rsa tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint
$ sudo sshfs -o allow_other,IdentityFile=~/.ssh/id_rsa tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint 【基于 Debian/Ubuntu 的系统】
其他常见选项
代码语言:javascript复制将本地当前登陆用户映射为远端用户user
$ sshfs myuser@mycomputer:/remote/path /local/path -o idmap=user
具体可参考man sshfs
Chrooting
代码语言:javascript复制vim /etc/ssh/sshd_config
-------------------------------------------
.....
Match User someuser
ChrootDirectory /chroot/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
.....
------------------------------------------
注意:chroot目录的属主必须是root,否则你将无法连接。
进一步信息可参考 man sshd_config(5)的Match, ChrootDirectory和ForceCommand部分。
步骤 4:验证远程的文件系统挂载成功
如果你已经成功的运行了上面的命令并且没有任何错误,你将会看到挂载在 /mnt/tecmint 目录下的远程的文件和目录的列表
代码语言:javascript复制# cd /mnt/tecmint
# ls
[root@ tecmint]# ls
12345.jpg ffmpeg-php-0.6.0.tbz2 Linux news-closeup.xsl s3.jpg
cmslogs gmd-latest.sql.tar.bz2 Malware newsletter1.html sshdallow
epel-release-6-5.noarch.rpm json-1.2.1 movies_list.php pollbeta.sql
ffmpeg-php-0.6.0 json-1.2.1.tgz my_next_artical_v2.php pollbeta.tar.bz2
步骤 5:使用 df -hT 命令检查挂载点
如果你运行 df -hT命令,你将会看到远程文件系统的挂载点。
代码语言:javascript复制# df -hT
样本输出:
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 730M 0 730M 0% /dev
tmpfs tmpfs 150M 4.9M 145M 4% /run
/dev/sda1 ext4 31G 5.5G 24G 19% /
tmpfs tmpfs 749M 216K 748M 1% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 749M 0 749M 0% /sys/fs/cgroup
tmpfs tmpfs 150M 44K 150M 1% /run/user/1000
tecmint@192.168.0.102:/home/tecmint fuse.sshfs 324G 55G 253G 18% /mnt/tecmint
步骤 6:永久挂载远程文件系统
为了永久的挂载远程的文件系统,你需要修改一个叫 /etc/fstab 的文件。照着做,使用你最喜欢的编辑器打开文件。
代码语言:javascript复制# vi /etc/fstab
$ sudo vi /etc/fstab 【基于 Debian/Ubuntu 的系统】
移动到文件的底部并且添加下面的一行,保存文件并退出。下面条目表示使用默认的设置挂载远程的文件系统。
代码语言:javascript复制格式
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs defaults,_netdev 0 0
注意:使用_netdev选项是为了在挂载之前先保证网络可用。
例子
llib@192.168.1.200:/home/llib/FAH /media/FAH2 fuse.sshfs defaults,_netdev 0 0
tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint fuse.sshfs,_netdev defaults 0 0
用于多用户
user@domain.org:/home/user /media/user fuse.sshfs defaults,allow_other,_netdev 0 0
确保服务器之间允许SSH无密码登录,这样系统重启之后才能自动挂载文件系统。
如果你的服务器配置为基于SSH 密钥的认证方式,请加入如下行:
代码语言:javascript复制格式
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=user,follow_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID_N,gid=USER_GID_N 0 0
参数
allow_other 允许非root用户访问共享资源。
default_permissions 检查权限,使用远端服务器的实际权限。控制不是本地所有用户都可以访问。
uid, gid 服务器侧的UID可以与本地用户的UID不同,但用户名要一样。在这里只需指出本地客户端的信息,uid=USER_C_ID,gid=GROUP_C_ID即可,sshfs会自动完成本地客户端到服务器端的转换。
例子
tecmint@x.x.x.x:/home/tecmint/ /mnt/tecmint fuse.sshfs IdentityFile=~/.ssh/id_rsa defaults,_netdev 0 0
接下来,你需要更新 fstab 文件使修改生效。
代码语言:javascript复制# mount -a
$ sudo mount -a 【基于 Debian/Ubuntu 的系统】
步骤 7:卸载远程的文件系统
为了卸载远程的文件系统,只需要发出以下的命令即可。
代码语言:javascript复制$ sudo umount /mnt/tecmint
或者
$ fusermount3 -u mountpoint
$ fusermount3 -u /local/path
关于SSHFS的自动挂载
1. 在系统启动时挂载
代码语言:javascript复制crontab -e
------------------------------------------
@reboot sh mountsshfs.sh
vim mountsshfs.sh
------------------------------------------
#! /bin/sh
while true
do
ping -c1 -w1 ssh_server_ip > /dev/null && break
done
sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 user@192.168.200.10:/pathto/dir /home/username/mount/dir
2. 利用/etc/fstab
代码语言:javascript复制user@host:/remote/folder /mount/point fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/user/.ssh/id_rsa,allow_other,reconnect 0 0
参数
noauto 不在boot时mount
x-systemd.automount 配置按需挂载
_netdev 避免“No such device”错误,指明sshfs是一个网络设备而非块设备
注意:在完成对/etc/fstab的修改后,需要执行如下命令
systemctl daemon-reload
systemctl restart <target>
这里 <target>可以使用如下命令查询
systemctl list-unit-files --type automount
3. 借助第三方工具 autosshfs
https://github.com/dyne/autosshfs.git
参考文献: https://wiki.archlinux.org/index.php/SSHFS
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219613.html原文链接:https://javaforall.cn