[ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

This is the best place for community developers to publish their genius work. Your Apps enrich the QNAP Turbo NAS.
Post Reply
User avatar
QNAP_Stephane
Experience counts
Posts: 3844
Joined: Wed Mar 27, 2013 1:00 am

[ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by QNAP_Stephane » Sat Mar 18, 2017 1:20 am

Image
Source : https://github.com/libfuse/sshfs

Download : http://www.qnapclub.eu/index.php?act=detail&qpkg_id=416

x86 version : http://www.qoolbox.fr/sshFS_2.8.0_x86.qpkg.zip
x64 version : http://www.qoolbox.fr/sshFS_2.8.0_x86_64.qpkg.zip
x19 version : http://www.qoolbox.fr/sshFS_2.8.0_arm-x19.qpkg.zip
x31 version : http://www.qoolbox.fr/sshFS_2.8.0_arm-x31.qpkg.zip
x41 version : http://www.qoolbox.fr/sshFS_2.8.0_arm-x41.qpkg.zip

Note :

sshfs command added automatically in NAS $PATH
Manageable over Web Interface

about :

This is a filesystem client based on the SSH File Transfer Protocol. Since most SSH servers already support this protocol it is very easy to set up: i.e. on the server side there's nothing to do. On the client side mounting the filesystem is as easy as logging into the server with ssh.

The idea of sshfs was taken from the SSHFS filesystem distributed with LUFS, which I found very useful. There were some limitations of that codebase, rewrite it. Features of this implementation are:

  • Based on FUSE (the best userspace filesystem framework for Linux ;)
  • Multithreading: more than one request can be on it's way to the server
  • Allowing large reads (max 64k)
  • Caching directory contents
  • Reconnect on failure

How to mount a filesystem

Once sshfs is installed (see next section) running it is very simple:

Code: Select all

sshfs hostname: mountpoint


Note, that it's recommended to run it as user, not as root. For this to work the mountpoint must be owned by the user. If the username is different on the host you are connecting to, then use the "username@host:" form. If you need to enter a password sshfs will ask for it (actually it just runs ssh which ask for the password if needed). You can also specify a directory after the ":". The default is the home directory.

Also many ssh options can be specified (see the manual pages for sftp(1) and ssh_config(5)), including the remote port number (-oport=PORT)

To unmount the filesystem:

Code: Select all

fusermount -u mountpoint


usage command line :

Code: Select all

usage: ./sshfs [user@]host:[dir] mountpoint [options]

general options:
    -o opt,[opt...]        mount options
    -h   --help            print help
    -V   --version         print version

SSHFS options:
    -p PORT                equivalent to '-o port=PORT'
    -C                     equivalent to '-o compression=yes'
    -F ssh_configfile      specifies alternative ssh configuration file
    -1                     equivalent to '-o ssh_protocol=1'
    -o reconnect           reconnect to server
    -o delay_connect       delay connection to server
    -o sshfs_sync          synchronous writes
    -o no_readahead        synchronous reads (no speculative readahead)
    -o sync_readdir        synchronous readdir
    -o sshfs_debug         print some debugging information
    -o cache=BOOL          enable caching {yes,no} (default: yes)
    -o cache_max_size=N    sets the maximum size of the cache (default: 10000)
    -o cache_timeout=N     sets timeout for caches in seconds (default: 20)
    -o cache_X_timeout=N   sets timeout for {stat,dir,link} cache
    -o cache_clean_interval=N
                           sets the interval for automatic cleaning of the
                           cache (default: 60)
    -o cache_min_clean_interval=N
                           sets the interval for forced cleaning of the
                           cache if full (default: 5)
    -o workaround=LIST     colon separated list of workarounds
             none             no workarounds enabled
             all              all workarounds enabled
             [no]rename       fix renaming to existing file (default: off)
             [no]nodelaysrv   set nodelay tcp flag in sshd (default: off)
             [no]truncate     fix truncate for old servers (default: off)
             [no]buflimit     fix buffer fillup bug in server (default: on)
    -o idmap=TYPE          user/group ID mapping (default: none)
             none             no translation of the ID space
             user             only translate UID/GID of connecting user
             file             translate UIDs/GIDs contained in uidfile/gidfile
    -o uidfile=FILE        file containing username:remote_uid mappings
    -o gidfile=FILE        file containing groupname:remote_gid mappings
    -o nomap=TYPE          with idmap=file, how to handle missing mappings
             ignore           don't do any re-mapping
             error            return an error (default)
    -o ssh_command=CMD     execute CMD instead of 'ssh'
    -o ssh_protocol=N      ssh protocol to use (default: 2)
    -o sftp_server=SERV    path to sftp server or subsystem (default: sftp)
    -o directport=PORT     directly connect to PORT bypassing ssh
    -o slave               communicate over stdin and stdout bypassing network
    -o disable_hardlink    link(2) will return with errno set to ENOSYS
    -o transform_symlinks  transform absolute symlinks to relative
    -o follow_symlinks     follow symlinks on the server
    -o no_check_root       don't check for existence of 'dir' on server
    -o password_stdin      read password from stdin (only for pam_mount!)
    -o SSHOPT=VAL          ssh options (see man ssh_config)

FUSE options:
    -d   -o debug          enable debug output (implies -f)
    -f                     foreground operation
    -s                     disable multi-threaded operation

    -o allow_other         allow access to other users
    -o allow_root          allow access to root
    -o auto_unmount        auto unmount on process termination
    -o nonempty            allow mounts over non-empty file/dir
    -o default_permissions enable permission checking by kernel
    -o fsname=NAME         set filesystem name
    -o subtype=NAME        set filesystem type
    -o large_read          issue large read requests (2.4 only)
    -o max_read=N          set maximum size of read requests

    -o hard_remove         immediate removal (don't hide files)
    -o use_ino             let filesystem set inode numbers
    -o readdir_ino         try to fill in d_ino in readdir
    -o direct_io           use direct I/O
    -o kernel_cache        cache files in kernel
    -o [no]auto_cache      enable caching based on modification times (off)
    -o umask=M             set file permissions (octal)
    -o uid=N               set file owner
    -o gid=N               set file group
    -o entry_timeout=T     cache timeout for names (1.0s)
    -o negative_timeout=T  cache timeout for deleted names (0.0s)
    -o attr_timeout=T      cache timeout for attributes (1.0s)
    -o ac_attr_timeout=T   auto cache timeout for attributes (attr_timeout)
    -o noforget            never forget cached inodes
    -o remember=T          remember cached inodes for T seconds (0s)
    -o nopath              don't supply path if not necessary
    -o intr                allow requests to be interrupted
    -o intr_signal=NUM     signal to send on interrupt (10)
    -o modules=M1[:M2...]  names of modules to push onto filesystem stack

    -o max_write=N         set maximum size of write requests
    -o max_readahead=N     set maximum readahead
    -o max_background=N    set number of maximum background requests
    -o congestion_threshold=N  set kernel's congestion threshold
    -o async_read          perform reads asynchronously (default)
    -o sync_read           perform reads synchronously
    -o atomic_o_trunc      enable atomic open+truncate support
    -o big_writes          enable larger than 4kB writes
    -o no_remote_lock      disable remote file locking
    -o no_remote_flock     disable remote file locking (BSD)
    -o no_remote_posix_lock disable remove file locking (POSIX)
    -o [no_]splice_write   use splice to write to the fuse device
    -o [no_]splice_move    move data while splicing to the fuse device
    -o [no_]splice_read    use splice to read from the fuse device

Module options:

[subdir]
    -o subdir=DIR           prepend this directory to all paths (mandatory)
    -o [no]rellinks         transform absolute symlinks to relative

[iconv]
    -o from_code=CHARSET   original encoding of file names (default: UTF-8)
    -o to_code=CHARSET      new encoding of the file names (default: UTF-8)
--------------------------------------------------------------------------
QnapClub AppCenter - https://www.qnapclub.eu
--------------------------------------------------------------------------

User avatar
OneCD
Ask me anything
Posts: 7931
Joined: Sun Aug 21, 2016 10:48 am
Location: "... there, behind that sofa!"

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by OneCD » Sat Mar 18, 2017 1:45 am

Oh, cool! :)

ImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImageImage

User avatar
peelos
Been there, done that
Posts: 504
Joined: Sun Jun 26, 2016 9:28 pm

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by peelos » Wed May 03, 2017 9:43 pm

This looks like it has potential for my use case to solve issues with Mac OS X Sierra requiring re-connection to an AFP share and re-logging in each time macbook is disconnected from network.

Use case:

Connect remotely to network share using domain name / static IP address

Provide access to specific folders with user accounts and passwords saved in keychain or prompted to login

Did anyone try configuring this to do that - was looking at this option but looks like Sierra is no longer supported: https://github.com/dstuecken/sshfs-gui

Thanks in advance
NAS: TVS-1282-i7K-40G / 4 x 500GB SSD 2.5" / 2 x 500GB M.2 SSD / 8 x 4TB WD Red 3.5" / Corsair H5-SF Watercooling / 3 x 80mm PWM Noctua fans / Corsair 600W PSU / Asus Turbo GTX 1060 6GB GPU
Software: Plex Media Server / QTransmission / Sonarr / Radarr / Jackett / QMono / Tautulli / OpenHAB / Resilio Sync / QPython / QJDK 8 / NetData / Qapache / SortMyQPKGs
pfSense Firewall / OpenVPN Server: QOTOM Fanless Mini PC / Core i5 / 8GB RAM / 128GB SSD / 4 Gigabit NICs / AES-NI
Wireless Routers: 2 x Netgear AC1900 R7000 Nighthawk / Advanced Tomato Firmware

h0ck932
New here
Posts: 9
Joined: Sat Aug 04, 2018 5:00 am

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by h0ck932 » Sat Aug 04, 2018 5:10 am

Hello,
sorry to kind of reopen this more then a year old topic, but would it please be possible to create sshfs also for TS-328 which has Realtek RTD 1296 quad-core ARM Cortex A53 processor (similar to what for example TS-X28A has)? Unfortunately none of the arm versions here are compatible with TS-328. It would be really great. I recently bought 328 and it kind of surprises me how many limitations does it have :/. The sshfs would solve a lot of trouble for me and I would be really grateful :).
TS-328 since July 2018, box died in September, refunded at the end of October. Went to Synology DS418j.

User avatar
QNAP_Stephane
Experience counts
Posts: 3844
Joined: Wed Mar 27, 2013 1:00 am

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by QNAP_Stephane » Sat Aug 04, 2018 1:46 pm

will updated it... but you need to wait for 2 weeks... i am far from my dev environment actually ;)
--------------------------------------------------------------------------
QnapClub AppCenter - https://www.qnapclub.eu
--------------------------------------------------------------------------

h0ck932
New here
Posts: 9
Joined: Sat Aug 04, 2018 5:00 am

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by h0ck932 » Sat Aug 04, 2018 2:25 pm

wohoooo, you are awesome!! ofcourse I can wait for 2 weeks, thats not an issue at all :) thank you very much!
As I basically have no idea what it involves to update it, can I please be so bold to ask also for update of Midnight Commander (viewtopic.php?t=114040) when you find some time for it?
TS-328 since July 2018, box died in September, refunded at the end of October. Went to Synology DS418j.

h0ck932
New here
Posts: 9
Joined: Sat Aug 04, 2018 5:00 am

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by h0ck932 » Sat Aug 04, 2018 5:25 pm

Hi Philippe,
all right, this was the last "drop"... :) I was already thinking of the entware or optware, but to be honest, I didnt have the balls for it as Im totaly new to QNAP.
But I installed "Entware-3x-std", rebooted the NAS and after a bit of figuring out that I have to run "opkg update" before Ill be actualy able to see all the new available packages, it was just a matter of a minute to "opkg install sshfs", "opkg install mc" and it works like a charm!
I have no problem with "command line only" restriction, thas actualy the way Im used to it anyway.
Thanks for providing the last kick to go for the Entware :).

@QNAP_Stephane: thank you very much for your effort. No need to rush with it just because of me, I got everything I need thanks to Entware now :). But maybe it will be useful to someone else.
TS-328 since July 2018, box died in September, refunded at the end of October. Went to Synology DS418j.

zyxmon
Been there, done that
Posts: 865
Joined: Mon Oct 27, 2014 2:27 pm
Location: Moscow, Russia
Contact:

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by zyxmon » Sat Aug 04, 2018 5:54 pm

h0ck932 wrote:....
But I installed "Entware-3x-std"....

Entware-3x and Entware-ng merged into Entware. Entware-3x and Entware-ng packages are not updated any more. More info - viewtopic.php?f=351&t=139781

h0ck932
New here
Posts: 9
Joined: Sat Aug 04, 2018 5:00 am

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by h0ck932 » Sat Aug 04, 2018 9:57 pm

Oh I see, thank you for pointing that out. I ran `opkg update; opkg upgrade` twice and I guess I now have the merged version, right?

Code: Select all

[~] # opkg list-installed|grep entw
entware-opt - 227000-3
entware-release - 1.0-2
entware-upgrade - 1.0-1
[~] #


edit couple hours later:
just found https://forum.qnap.com/viewtopic.php?f=351&t=140429 threat about how to check if entware is upgraded so the above question is no longer valid.

just one question, please. If the QNAP gui prompts me for update with new version of QTS (now I have 4.3.4.0644), is it safe to do so with the entware installed?
Last edited by h0ck932 on Sun Aug 05, 2018 3:15 am, edited 1 time in total.
TS-328 since July 2018, box died in September, refunded at the end of October. Went to Synology DS418j.

h0ck932
New here
Posts: 9
Joined: Sat Aug 04, 2018 5:00 am

Re: [ SSHfs ] [ 2.8.0 ] Mount remote directories over ssh in user space

Post by h0ck932 » Sun Aug 05, 2018 1:22 am

Hi Philippe,
all right, understood. Thank you very much. Ofcourse reading a changelog is always kind of a must before any update.
TS-328 since July 2018, box died in September, refunded at the end of October. Went to Synology DS418j.

Post Reply

Return to “Community Apps”