如何在 Linux 上使用 SSHFS 挂载远程目录
SSH 是一种安全协议,您可以使用它在 SSHF 服务的帮助下将目录挂载到远程服务器或本地笔记本电脑上。使用 SSHFS,您可以将远程服务器文件系统挂载到由 Linux 驱动的本地开发工作站/笔记本电脑上。[donotprint]
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | SSHFS |
预计阅读时间 | 5 分钟 |
有关 SSHFS 的更多信息
sshfs 是基于 SSH 文件传输协议的文件系统。它用于客户端系统,即您需要在本地计算机/笔记本电脑上安装 sshfs 包,该计算机/笔记本电脑由 CentOS/RHEL/Ubuntu/Debian/Arch Linux 驱动。无需在服务器 (server1.example.com) 上安装任何东西。您只需要在服务器端安装一个 openssh 服务器。我们的示例设置:
图 01:我们的示例设置
在 Ubuntu/Debian/Mint Linux 上安装 SSHFS
输入以下apt-get 命令:
apt-get update && apt-get upgrade sudo apt-get install sshfs
示例输出:
[sudo] password for example: Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: sshfs 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 41.7 kB of archives. After this operation, 138 kB of additional disk space will be used. Get:1 http://mirror.ox.ac.uk/sites/archive.ubuntu.com/ubuntu/ trusty/main sshfs amd64 2.5-1ubuntu1 [41.7 kB] Fetched 41.7 kB in 1s (27.8 kB/s) Selecting previously unselected package sshfs. (Reading database ... 247545 files and directories currently installed.) Preparing to unpack .../sshfs_2.5-1ubuntu1_amd64.deb ... Unpacking sshfs (2.5-1ubuntu1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Setting up sshfs (2.5-1ubuntu1) ...
在 Arch Linux 上安装 SSHFS
键入以下命令:
sudo pacman -S sshfs fuse
确保将名为 vivek 的用户添加到 fuse 组:
## [ create fuse group if does not exist as per your distro ] ##
$ sudo groupadd fuse
$ sudo usermod -a -G fuse vivek
在 RHEL (Red Hat)/CentOS Linux 上安装 SSHFS
首先,打开 EPEL repo,然后输入以下yum 命令来安装 FUSE-Filesystem,以便在 CentOS/RHEL 上通过 SSH 访问远程文件系统:
sudo yum update sudo yum install fuse-sshfs
示例输出:
Loaded plugins: auto-update-debuginfo, protectbase, rhnplugin, security This system is receiving updates from RHN Classic or RHN Satellite. Setting up Install Process 0 packages excluded due to repository protections Resolving Dependencies --> Running transaction check ---> Package fuse-sshfs.x86_64 0:2.4-1.el6 will be installed --> Processing Dependency: fuse >= 2.2 for package: fuse-sshfs-2.4-1.el6.x86_64 --> Running transaction check ---> Package fuse.x86_64 0:2.8.3-4.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================= Package Arch Version Repository Size ======================================================================================================================= Installing: fuse-sshfs x86_64 2.4-1.el6 epel 52 k Installing for dependencies: fuse x86_64 2.8.3-4.el6 rhel-x86_64-server-6 71 k Transaction Summary ======================================================================================================================= Install 2 Package(s) Total download size: 123 k Installed size: 115 k Is this ok [y/N]: y Downloading Packages: (1/2): fuse-2.8.3-4.el6.x86_64.rpm | 71 kB 00:00 (2/2): fuse-sshfs-2.4-1.el6.x86_64.rpm | 52 kB 00:00 ----------------------------------------------------------------------------------------------------------------------- Total 173 kB/s | 123 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : fuse-2.8.3-4.el6.x86_64 1/2 Installing : fuse-sshfs-2.4-1.el6.x86_64 2/2 Verifying : fuse-sshfs-2.4-1.el6.x86_64 1/2 Verifying : fuse-2.8.3-4.el6.x86_64 2/2 Installed: fuse-sshfs.x86_64 0:2.4-1.el6 Dependency Installed: fuse.x86_64 0:2.8.3-4.el6 Complete!
如何挂载远程文件系统?
语法是
sshfs user@server /path/to/mountpoint sshfs user@server /path/to/mountpoint options
首先,使用mkdir 命令创建一个目录:
sudo mkdir /mnt/server1
我将使用 root 用户挂载文件系统,您需要在提示时输入 root 密码:
sudo sshfs root@192.168.1.142:/ /mnt/server1/ ## OR use ssh key based login ## sudo sshfs -o IdentityFile=~/.ssh/keyfile /mnt/server1/
示例输出:
Password for root@freebsd10:
验证一下:
sudo df -h
示例输出:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/wks05-root 487G 114G 350G 25% /
none 4.1k 0 4.1k 0% /sys/fs/cgroup
udev 17G 4.1k 17G 1% /dev
tmpfs 3.4G 1.9M 3.4G 1% /run
none 5.3M 0 5.3M 0% /run/lock
none 17G 160k 17G 1% /run/shm
none 105M 50k 105M 1% /run/user
/dev/sda1 239M 89M 138M 40% /boot
root@192.168.1.142:/ 20G 12G 6.8G 64% /mnt/server1
要访问和/或查看远程文件系统,请运行:
sudo -s cd /mnt/server1 ls -l
示例输出:
图 02:sshfs 运行情况
处理“权限被拒绝”错误以及挂载远程目录的推荐程序
如果您收到无法访问 server1 的错误:权限被拒绝,请将自己添加到名为 fuse 的组中:
$ sudo gpasswd -a "$USER" fuse Adding user example to group fuse
接下来,在您自己的主目录中创建一个挂载点:
$ mkdir $HOME/server1 $ ls -ld !$ ls -ld $HOME/server1 drwxrwxr-x 2 example example 4096 Mar 8 04:34 /home/example/server1
要挂载远程文件系统,请输入:
sshfs -o idmap=user root@192.168.1.142:/ $HOME/server1 df ls -l $HOME/server1
图 03:在本地笔记本电脑/台式机上使用没有 root 访问权限的 sshfs
如何卸载远程文件系统?
语法是:
sudo umount /mnt/server1 ## OR ## fusermount -u /mnt/server1
验证一下:
df -h
如何通过更新 /etc/fstab 永久挂载远程文件系统?
对于持久挂载,您必须创建基于 ssh 密钥的登录
现在,编辑 /etc/fstab 文件,输入:
$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/id_rsa.pub vivek@server1.example.com
sudo vi /etc/fstab
语法是:
userNameHere@FQDN_OR_IP_HERE:/path/to/source/ /local/mountdir/ fuse.sshfs defaults,_netdev 0 0
示例
在文件底部添加以下条目:
sshfs#root@192.168.1.142:/ /mnt/server1
具有附加选项的另一个示例:
sshfs#$root@192.168.1.142:/ /mnt/server1 fuse defaults,idmap=user,allow_other,reconnect,_netdev,users,IdentityFile=/path/to/.ssh/keyfile 0 0
如果您使用 systemd,建议使用按需挂载选项:
vivek@server1.example.com:/project/www/ /mnt/server1 fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/vivek/.ssh/id_rsa,allow_other,reconnect 0 0
保存并关闭文件。其中,
- root@192.168.1.142:使用 sshd 的远程服务器
- fuse:文件系统类型。
- idmap=user:仅翻译连接用户的UID。
- allow_other:允许其他用户访问。
- reconnect:重新连接服务器。
- _netdev:文件系统驻留在需要网络访问的设备上(用于防止系统在系统上启用网络之前尝试挂载这些文件系统)。
- users:允许每个用户挂载和卸载文件系统。
- IdentityFile=/path/to/.ssh/keyfile– SSH 密钥文件。