How To Mount a Remote Directory With SSHFS on a Linux
H
ow can I mount a remote directory with ssh on a Linux bases system? How do I use SSHFS to mount remote file systems over SSH on a Ubuntu or Debian/RHEL/CentOS/Arch Linux system?
SSH is a secure protocol and you can use it to mount a directory on a remote server or local laptop with the help of the SSHF service. With SSHFS you can mount remote server file system to your local development workstation/laptop powered by Linux.
More on SSHFS
sshfs is a filesystem based on the SSH file transfer protocol. It is used on a client system i.e. you need to install sshfs package on your local computer/laptop powered by CentOS/RHEL/Ubuntu/Debian/Arch Linux. No need to install anything on server (server1.cyberciti.biz). You only need an openssh server installed on server side. Our sample setup:
Fig.01: Our sample setup
Installing SSHFS on a Ubuntu/Debian/Mint Linux
Type the following apt-get command:
apt-get update && apt-get upgrade
sudo apt-get install sshfs
Sample outputs:
[sudo] password for nixcraft:
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) …
Installing SSHFS on an Arch Linux
Type the following command:
sudo pacman -S sshfs fuse
Make sure you add user named vivek to fuse group:
[ create fuse group if does not exist as per your distro ] ##
$ sudo groupadd fuse
$ sudo usermod -a -G fuse vivek
Installing SSHFS on a RHEL (Red Hat)/CentOS Linux
First, turn on EPEL repo and then type the following yum command to install FUSE-Filesystem to access remote filesystems via SSH on a CentOS/RHEL:
sudo yum update
sudo yum install fuse-sshfs
Sample outputs:
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!
How do I mount the remote file system?
The syntax is
sshfs user@server /path/to/mountpoint
sshfs user@server /path/to/mountpoint options
First, create a directory using mkdir command:
sudo mkdir /mnt/server1
I’m going to mount file system using root user and you need to type root password when prompted:
sudo sshfs root@192.168.1.142:/ /mnt/server1/
OR use ssh key based login ##
sudo sshfs -o IdentityFile=~/.ssh/keyfile /mnt/server1/
Sample outputs:
Password for root@freebsd10:
Verify it:
sudo df -h
Sample outputs:
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
To access and/or to see the remote file system, run:
sudo -s
cd /mnt/server1
ls -l
Sample ouputs:
Fig. 02: sshfs in action
Dealing with “Permission denied” error and recommended procedure for mounting the remote directory
If you get an error that read as cannot access server1: Permission denied, add yourself to a group called fuse:
$ sudo gpasswd -a $USER fuse
Adding user nixcraft to group fuse
Next, create a mount point inside your own home directory:
$ mkdir $HOME/server1
$ ls -ld !$
ls -ld $HOME/server1
drwxrwxr-x 2 nixcraft nixcraft 4096 Mar 8 04:34 /home/nixcraft/server1
To mount the remote file system, enter:
sshfs -o idmap=user root@192.168.1.142:/ $HOME/server1
df
ls -l $HOME/server1
Fig.03: Using sshfs without root access on local laptop/desktop
How do I unmount the remote file system?
The syntax is:
sudo umount /mnt/server1
OR ##
fusermount -u /mnt/server1
Verify it:
df -h
How can I permanently mount the remote file system by updating /etc/fstab?
For persistent mounts, you must create ssh keys based login
$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/id_rsa.pub vivek@server1.cyberciti.biz
Now, edit the /etc/fstab file, enter:
sudo vi /etc/fstab
The syntax is:
userNameHere@FQDN_OR_IP_HERE:/path/to/source/ /local/mountdir/ fuse.sshfs defaults,_netdev 0 0
Examples
Add the following entry at the bottom of the file:
sshfs#root@192.168.1.142:/ /mnt/server1
Another example with additional options:
sshfs#$root@192.168.1.142:/ /mnt/server1 fuse defaults,idmap=user,allow_other,reconnect,_netdev,users,IdentityFile=/path/to/.ssh/keyfile 0 0
Recommend option for on-demand mounting if you are using systemd:
vivek@server1.cyberciti.biz:/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
Save and close the file. Where,
root@192.168.1.142 : Remote server with sshd
fuse : File system type.
idmap=user : Only translate UID of connecting user.
allow_other : Allow access to other users.
reconnect : Reconnect to server.
_netdev : The filesystem resides on a device that requires network access (used to prevent the system from attempting to mount these filesystems until the network has been enabled on the system).
users : Allow every user to mount and unmount the filesystem.
IdentityFile=/path/to/.ssh/keyfile – SSH key file.