22

I am using the following command to mount a ssh ubuntu directory to my ubuntu pc.

sshfs user@192.xx.xx.xx.xx:/dir/dir /home/username/mount/xxx

My question is, can I create a script for this in my desktop where I can make a double click and run this script when ever I need to mount the drive without manually typing the command always.

imuneer
  • 435

8 Answers8

30

I am adding an fstab method, since no one talks about it in this page. If you don't want hacks and use the builtin advanced mounting features, you need to use /etc/fstab and never look back. ​

user@host:/remote/folder /mount/point fuse.sshfs noauto,x-systemd.automount,_netdev,IdentityFile=/home/name/.ssh/id_rsa,allow_other,reconnect 0 0

  • noauto will stop the no-brainer actions like forcibly mounting whatsoever at booting regardless if the network is up or not.
  • x-systemd.automount is the smart daemon that knows when to mount.
  • The _netdev tag will also identify that it uses network devices, thus it will wait until the network is up. ​​​​​​
Grim
  • 57
Seandex
  • 579
  • I'm confused, why is this not at the top? – Matt Alexander Jan 09 '21 at 01:15
  • @MattAlexander I guess that's because this answer is the most recent one and needs more votes. – Seandex Feb 03 '21 at 18:48
  • It is indeed a great answer. What if your ssh configuration uses a non-standard port? Where would you write that? Also, is there an option to read the identity file (and the username, the address and the port #) from the configuration file in .ssh (for instance) instead of typing them in? – Andyc Jul 19 '21 at 11:05
  • 1
    @Andyc insert 'port=xxxx', -- in example, (...,_netdev,port=2314,IdentityFile=/home/name/.ssh/id_rsa, allow_other,...) – Seandex Jan 13 '22 at 15:51
15

You could create a launcher and add it to your launcher bar by drag&dropping the .desktop-file there:

    #!/usr/bin/env xdg-open

    [Desktop Entry]
    Version=1.0
    Type=Application
    Terminal=false
    Icon[en_US]=nautilus
    Name[en_US]=Connect to xy
    Exec=shfs user@192.xx.xx.xx.xx:/dir/dir /home/username/mount/xxx
    #OR: to mount and than open in nautilus (note the '/dir' where ':dir' used to be)
    #Exec=nautilus sftp://user@192.xx.xx.xx.xx/dir/dir
    Comment[en_US]=Connect to xy via ssh
    Name=Connect to xy
    Comment=Connect to xy via ssh
    Icon=nautilus

Suggestion - even less work:

If you want even less work (=autoconnect) and a graphical user interface, you might want to check out Gigolo Install gigolo. It has the capability of auto-mounting a bookmark, whenever the bookmarked filesystem is present. You might want to check that out.

sudo apt-get install gigolo   # or use the install link above

Run gigolo. There is an option in the preferences that puts it into autostart and another to activate the tray icon. Check both. Then add your bookmark.

Here is a screenshot:

enter image description here

Shell way

Another solution would be to put the following line in your crontab (edit /etc/crontab with sudo privileges):

@reboot sshfs user@192.xx.xx.xx.xx:/dir/dir /home/username/mount/xxx

But since Ubuntu's password manager is not present when the command is run you need to use a password-less private/public key pair to authenticate with the ssh server in question (or a similar method of authentication). This would mount it on every reboot.

Yet another solution would be to edit your /etc/fstab (providing your Ubuntu-Version provides that option).

jokerdino
  • 41,320
con-f-use
  • 18,813
  • 1
    I can not use gigolo. Coz I want to use a specific mounting point within my home folder. Your first solution seems good. But I am not clear about the file naming. YOu have given ".desktop-file" Is that the file name or extension to be. Please give me more example on the file naming. THen I can try it. – imuneer May 18 '11 at 10:33
  • It's the extension. All launchers in ubuntu end with ".desktop". Create an empty file. Copy the text I posted above into it. Replace the text behind "Name=" by whatever suits you and substitute the real paths in the the text behind "Exec=". Then Save it as "connect.desktop" or "mountxy.desktop" (for example). After you saved the file Drag&Drop it into your launcher panel or where ever you want it. – con-f-use May 18 '11 at 14:34
  • Great!! It worked. – imuneer May 19 '11 at 06:17
  • 10
    OMG... worst name ever for a program. – Lekensteyn Jul 06 '11 at 07:47
  • Apparently there's no option to add gigolo to autostart anymore, so you'll have to do it yourself. Run gnome-session-properties and add /usr/bin/gigolo command. It's not possible to select a mount point, but you can create a symbolic link to your home directory (with ln -s). You can find the original mount point by right-clicking a folder in file manager and selecting Open in Local Terminal. – Seppo Enarvi Sep 25 '18 at 08:21
5

This forum thread shows a method of creating an automounting SSHFS which seems to me exactly what you would like to do.

Zanna
  • 70,465
lbrown
  • 51
  • The thread is quite old and to add network dependent mount we can now use x-systemd and _netdev options. – Turgon Nov 16 '19 at 19:27
4

You can simply type this to a shell script, and you can create a launcher for it at the desktop.

For example mountssh.sh:

#!/bin/bash
shfs user@192.xx.xx.xx.xx:/dir/dir /home/username/mount/xxx

make sure to chmod +x mountssh.sh and then clicking it will execute

Alternatively, you can mount it via gvfs, by right clicking at the desktop, and creating a launcher with URL parameter: ssh://user@192.xx.xx.xx.xx/dir/dir. By default it mounts to ~/.gvfs/.... If you want stick with the /home/username/mount/xxx, you can create symlink from the gvfs one to this.

Iradrian
  • 1,318
  • I created the file "mount-192.168.1.5.sh" on my desktop. When I double click it, it is opened with gedit. – imuneer May 18 '11 at 10:28
  • You have to create this sh file with executable priviliges anywhere, and create a launcher at your desktop, which points to this .sh file. – Iradrian May 18 '11 at 12:29
3

You could even take it a step further and have autofs take care of the mounting for you. Since autofs doesn't work particularly well with SSH public key authentication (unless you want to create a passwordless key pair for the superuser), there are tools that allow you to use the user's SSH keys, ssh-agent and keychain:

  • autosshfs: per user SSHFS automount using user's SSH configuration
  • afuse: an automounter implemented with FUSE
kynan
  • 2,207
1

I tried to use cron to automatically mount ssh directory, but it causes an error saying Network is unreachable. It is because the cron job execution is too early to establish ip connections. After I inserted sleep before the sshfs command, it successfully mount the ssh directory.

sleep 5 && sshfs ......

So I made this script to fulfill my requirement.

#! /bin/sh
while true
do 
    ping -c1 -w1 ssh_server_ip > /dev/null && break
done
sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 sshname:/mountpath /localmountpath
kirin
  • 277
1

Since none of the answers worked for me and I managed to figure this out, I figured I should share it with the world. My solution also autoreconnects when the mount disconnects and works when the machine boots up without problems. Just add this to your /etc/fstab file (one-liner):

user@user.example.org:/  /mnt/location   fuse.sshfs    defaults,allow_other,_netdev,IdentityFile=/root/.ssh/id_rsa,default_permissions,uid=YOURIDHERE,gid=YOURIDHERE,follow_symlinks,reconnect    0  0

Some notes:

You NEED SSH keys for this apparently. You can copy your SSH keys using ssh-copy-id or manually - which one you prefer. The automounting only works with SSH keys in other words. You can troubleshoot the SSH connection with editing the fstab file and then calling mount -av.

allow_other allows when the root has mounted the automount that not only the root can access it.

IdentityFile is the necessary pointer to the SSH key as evidenced in Arch Wiki, but apparently not described what syntax it uses. Just don't forget to replace the placeholders for uid and gid ;) I think you can comma separate the IDs, but I haven't tried it.

This was super useful for my Nextcloud instance, since I wanted to remotely mount an external storage box and follow_symlinks allows the required functionality for supporting symlinks in the mount, which is required for Nextcloud when you start using external storage and similar stuff.

1

I mount a folder the exact same way, what i did was create a custom launcher that points to a .sh file that contains the command. Just make sure the file has execution permission and you're good to go.

I just click on the launcher:

enter image description here

amosrivera
  • 1,226