You need ssh logins without password (using an ssh agent) and the sshfs package:
sudo apt install sshfs
I use two bash scripts to ensure automatic mounting and un-mounting as my network comes up or goes down, especially when using wifi :
Copy the scripts to the following paths (or create symlinks) and use
chmod ugo+x to make sure they are executable:
If you use NetworkManager you might have to enable and start its dispatcher service:
sudo systemctl enable NetworkManager-dispatcher.service sudo systemctl start NetworkManager-dispatcher.service
On Debian there is a system script that automatically translates NetworkManager events to ifupdown events:
With the dispatcher and the translater script in place, our mount/unmount scripts will be executed as desired.
Every user who wants to use the mechanism we have set up so far needs to have a personal shell script at
For each user, this script contains the sshfs invocations that the user wants to be auto-executed. It will be invoked automatically from /etc/network/if-up.d/mount-sshfs using the user’s permissions. Users who don’t need sshfs mounts, simply don’t create the file at all.
It is up to the individual user to create this file and make it executable.
Here is an example that works well with gnome-keyring as ssh-agent:
#!/bin/bash # expose env vars for gnome-keyring ssh-agent: export SSH_AUTH_SOCK="/run/user/$(id -u)/keyring/ssh" export SSH_AGENT_PID="$(pgrep -f /usr/bin/ssh-agent)" # if the ssh agent is running: if [ -n "$SSH_AGENT_PID" ]; then sshfs -o idmap=user,ro bubba:/opt/data /home/oliver/hosts/bubba/data sshfs -o idmap=user tc: /home/oliver/hosts/tc fi
We use an Excito Bubba/2 mini server that hosts shared storage for the whole family (
bubba:/opt/data) and a little ThinkCentre server where I have a user account (
tc:). I mount each of those server locations locally under
I mount the shared storage read-only to prevent accidental data loss (-o ro) and my personal files as read-write (-o rw), with ownership mapping by username (
idmap=user) to ensure that “oliver” on the server is mapped to the local “oliver”.