How to Mount a Remote Linux FileSystem using SSHFS on Ubuntu 18.04

In this wiki article, we will learn how to create a link between two servers to share the Disk / FileSystem / even Directories using Secure Shell File System.

We assume you have an SSH Key-based Authentication configured on both the servers. This will provide the SSHFS to reconnect and automount the FileSystem after a brief disconnection caused by either network loss or if the system is unreachable.

In this article,

  • host1 will be the local system and host2 will be the remote system
  • We will mount the FileSystem from host2 to host1 and have access to data on both servers.

Step 1: Install SSHFS Client

Run the following command on both servers:

apt-get install sshfs

Step 2: Create a Mount Directory on Local System

We will create a mount point directory so we can mount the remote FileSystem.

mkdir /mnt/backup

Of-course in your case, you can have the mount directory as required.

Step 3: Mounting Remote FileSystem using SSHFS

On our Host2 or the Remote Server, we have a directory /root/remoteFiles which we will use for mounting.

You can have a whole Disk or Partition or a specific Directory to mount.

sshfs -o allow_other,IdentityFile=~/.ssh/id_rsa root@host2:/root/remoteFiles /mnt/backup

Since we have SSH Key-based Authentication configured, we will have to include the path to the public key with option IdentityFile

Usage:

  • allow_other: Allow access to other users.
  • IdentityFile=/path/to/.ssh/keyfile : Path to your SSH key file (normally, it's "/.ssh/id_rsa").

Step 4: Verifying the Remote FileSystem

Since we have mounted the remote FileSystem to /mnt/backup, you can change directory and list out the files present on the mounted FS.

ls /mnt/backup/

In case you do not have any files or data, simply create one and it should be accessible on both the servers.

Another way to confirm would be using df -Th,

root@host1:~# df -Th
Filesystem                   Type        Size  Used Avail Use% Mounted on
udev                         devtmpfs    463M     0  463M   0% /dev
tmpfs                        tmpfs        99M  620K   98M   1% /run
/dev/vda2                    xfs          25G  2.2G   23G   9% /
tmpfs                        tmpfs       493M     0  493M   0% /dev/shm
tmpfs                        tmpfs       5.0M     0  5.0M   0% /run/lock
tmpfs                        tmpfs       493M     0  493M   0% /sys/fs/cgroup
root@host2:/root/remoteFiles fuse.sshfs   25G  3.0G   22G  13% /mnt/backup
tmpfs                        tmpfs        99M     0   99M   0% /run/user/0

Step 5: Making the Mount Permanent and Automatic.

To avoid any disconnections from the Remote server and eventually loose the mounted FileSystem.

We will create a way to mount the FileSystem if the remote server gets disconnected by any sort of network issue.

We will fix it by updating the /etc/fstab file.

vi /etc/fstab

At the end of the file, add the following line,

root@host2:/root/remoteFiles /mnt/backup fuse.sshfs delay_connect,_netdev,IdentityFile=~/.ssh/id_rsa,allow_other,reconnect,ServerAliveInterval=45,ServerAliveCountMax=2 0 0

Save and exit the file and run the following command to update and confirm there are no errors.

mount -a

We will see what the options used in the above command does,

  • _netdev: tells it is a network device, not a block device.
  • IdentityFile=/path/to/.ssh/keyfile : Path to your SSH key file (normally, it's "/.ssh/id_rsa").
  • allow_other: Allow other users than the mounter (i.e. root) to access the share.
  • reconnect,ServerAliveInterval=45,ServerAliveCountMax=2: is the part where it'll reconnect to the remote FileSystem after being disconnected.

Step 6: Unmounting the Remote FileSystem

To unmount a FileSystem, run the following command and also remove the entry from /etc/fstab

umount /mnt/backup

This would wrap up with Mounting FileSystem on the local server using SSHFS.