As a web host, I have a need to access files on my server for a number of different accounts to make quick changes and move files around. It’s really handy to be able to mount a remote SFTP connection locally. If you have that need, I have a tutorial for you.
Install sshfs
sudo apt-get install sshfs
If it’s not already installed.
Local Folder Setup
You’ll want to create a folder somewhere for your mount folders. In my case, I’ll create a folder that matches the domain name I’m connecting to, and I store all of these in ~/www
. So let’s say I own example.com
and example2.com
. I’ll create two directories, as follows:
~/www/example.com
~/www/example2.com
Set up keys
Generate a key if you don’t have one
Reference: https://help.ubuntu.com/community/SSH/OpenSSH/Keys
If you don’t have an RSA key set up, check out the above. In summary:
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa
I chose to use no password because I consider my desktop secure. Note that the above is a one-time setup.
Copy the key to the remote connection
Now that you have a key, you need to copy it to your remote host to be able to log in without a password, using that key:
ssh-copy-id [email protected]
You’ll be prompted for the password. As it tells you, once you complete that process, you’ll be able to run ssh [email protected]
and connect without a password prompt.
Create the .bash_aliases functions
Now we’ll create two functions in .bash_aliases
so we can mount and unmount at will. So open ~/.bash_aliases
in your editor of choice. I recommend a graphical editor such as pluma
. (note: see here for an easier way to edit .bash_aliases
)
Here’s the two functions for our two example domains:
s()
{
if [ "$1" == e -o "$1" == example.com ]; then
sshfs [email protected]:/home/e/ ~/www/example.com/
elif [ "$1" == e2 -o "$1" == example2.com ]; then
sshfs [email protected]:/home/e2/ ~/www/example2.com/
else
echo "Valid sites include:"
echo "e, e2"
fi
}
u()
{
if [ "$1" == e -o "$1" == example.com ]; then
fusermount -u ~/www/example.com
if [ "$1" == e2 -o "$1" == example2.com ]; then
fusermount -u ~/www/example2.com
else
mount | grep www
fi
}
Let’s walk through this. The command names I’ve chosen are s
to mount (because it was short for “site” in my mind. Choose something that works for you, but run which [command]
to see if it’s already in use out there first) and u
to unmount.
The if
statement basically says that if the first parameter is “e” or “example.com”, then run the next line. I like to have the username and domain name as options in case I remember one but not the other
The sshfs
line is set up as follows:
sshfs [username]@[domain.ext]:/path/on/remote/server ~/www/[localfolder]/
If you have a cPanel server, your remote path is /home/[username]/
.
I like to add the echo
'd lines at the bottom so if I run the command with no parameter (or an incorrect one), it gives me a list of what I’ve already set up. It just occurred to me while writing this that an alternative command for the else
section that would be good would be ls ~/www/
so it lists the directories you’ve set up. I’ve just updated my alias to do this.
The u
command is similar. I copy the if
line when I add it to s
, then copy one of the other fusermount
lines and update the folder.
The last bit is that mount
command in the else
section. It will list all mounted folders that have www
in the path, which in my case is only the ones I mounted using the s
command. So it helps me see what’s actually mounted if I run a bare u
command.
Make sense?
I tried to keep this short, so I might have made it too short. Does everything make sense? If not, poke me and I’ll try to answer questions and edit this so that it makes more sense.