ããã¯ããªã«ãããããŠæžãããã®ïŒ
SSHFSãšãããSSHãšFUSEïŒFilesystem in UserspaceïŒã䜿çšãããããã¯ãŒã¯ãã¡ã€ã«ã·ã¹ãã ã®ããŠã³ããã§ããä»çµã¿ãããããšã
ç¥ã£ãã®ã§ãã¡ãã£ãšè©ŠããŠã¿ããããªããšã
SSHFS
SSHFSã®ãªããžããªã¯ãã¡ãã
GitHub - libfuse/sshfs: A network filesystem client to connect to SSH servers
ArchLinuxã«ãããã¥ã¡ã³ãããã£ããã
ä»ã«ãèšäºããã£ããããŸãã
sshで他マシンのファイルシステムをマウントするには − @IT
SSHFSã¯ãSFTPã䜿çšããŠãªã¢ãŒããã¡ã€ã«ã·ã¹ãã ãããŠã³ãã§ããä»çµã¿ã§ãã
SSHFS allows you to mount a remote filesystem using SFTP.
SFTPã¯éåžžãSSHãµãŒããŒã§å©çšã§ããã®ã§ããµãŒããŒåŽã«ç¹å¥ãªçšæã¯äžèŠã§ãã
Most SSH servers support and enable this SFTP access by default, so SSHFS is very simple to use - there's nothing to do on the server-side.
ãã ãéçºç¶æ³ã«ã€ããŠã¯æ³šææžãããããŸããŠã
SSHFSèªäœã¯å€ãã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã«äœ¿çšå¯èœã§ããã§ã«ãããã¯ã·ã§ã³ã§äœ¿çšãããŠãããã®ã®ãSSHFSèªäœã®éçºã
ããŸãã¢ã¯ãã£ãã§ã¯ãªãããšãæžãããŠããŸãã
圱é¿ã®å€§ããåé¡ä»¥å€ã«ã¯ãéçºããäœåã¯ãªãããã§ãã
ãã®ç¹ã¯æŒãããŠãããæ¹ãããã§ãããã
ãŸããè£ã®ä»çµã¿ãSSHãªã®ã§æå·åããã¡ã€ã«è»¢éã®ãªãŒããŒããããªã©ã¯ãããããšã«ã¯æ³šæãå¿
èŠã§ããããã§ããããã°ã
ç°¡åã«äœ¿ããã®ã§äŸ¿å©ãªã®ããªããšæããŸãã
äœ¿ãæ¹ã¯ãã¡ãã«æžãããŠãããsshfsã³ãã³ãã§ããŠã³ãããŠãfusermountã³ãã³ãã§ã¢ã³ããŠã³ãããç°¡åãªãã®ã§ãã
æšå¥šãšããŠã¯ãéåžžã®ãŠãŒã¶ãŒïŒérootïŒã§å®è¡ããããšã
It is recommended to run SSHFS as regular user (not as root).
ãµãŒããŒåŽã®ãã£ã¬ã¯ããªãæå®ããªãå Žåã¯ããªã¢ãŒãã®ããŒã ãã£ã¬ã¯ããªãããŠã³ãããåäœã«ãªãããã§ãã
If the directory is omitted, SSHFS will mount the (remote) home directory.
ã¢ã¯ã»ã¹æ¹æ³ã¯ããã¹ã¯ãŒãã䜿ããã®ã§ããããã§ãªããŠãè¯ãããã§ãã
If you need to enter a password sshfs will ask for it (actually it just runs ssh which asks for the password if needed).
ä»åã¯æ±ãã€ããã¯ãããŸããããOSã®èµ·åæã«ããŠã³ãããæ¹æ³ã«ã€ããŠã¯ArchLinuxã®Wikiã«èšèŒããããŸãã
archlinux / SSHFS / èªåããŠã³ã
ã§ã¯ã1床詊ããŠã¿ãŸãããã
ç°å¢
ä»åã®ç°å¢ã¯ããã¡ãã
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal $ uname -srvmpio Linux 5.4.0-110-generic #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu Linux 20.04 LTSã2ã€çšæããŸããçæ¹ã¯SSHãµãŒããŒãšããŠäœ¿ããŸãã
SSHãµãŒããŒåŽã®IPã¢ãã¬ã¹ã¯ã192.168.33.11ãšããŸãã
SSHãµãŒããŒåŽ
ãŸãã¯ãSSHãµãŒããŒåŽããçšæããŠãããŸãã
SSHæ¥ç¶çšã®ãŠãŒã¶ãŒãäœæã
$ sudo adduser remote-user $ su - remote-user
é©åœã«ã$HOMEãã£ã¬ã¯ããªé
äžã«ãã£ã¬ã¯ããªãäœã£ãŠ
$ mkdir dir1 dir2 dir3
ãã¡ã€ã«ãäœããŸãã
$ echo hello > dir1/hello.txt $ echo world > dir2/world.txt $ echo ssh > dir3/ssh.txt
ãããªæãã«ãªããŸããã
$ tree dir* dir1 âââ hello.txt dir2 âââ world.txt dir3 âââ ssh.txt 0 directories, 3 files
SSHFSã䜿ã£ãŠããªã¢ãŒããã£ã¬ã¯ããªãããŠã³ããã
ã§ã¯ãSSHFSã䜿ã£ãŠãå ã»ã©çšæãããªã¢ãŒããã£ã¬ã¯ããªãããŠã³ãããŸãããã
ãŸãã¯SSHFSãã€ã³ã¹ããŒã«ããŸãã
$ sudo apt install sshfs
ä»åã€ã³ã¹ããŒã«ããSSHFSã®ããŒãžã§ã³ã
$ sshfs --version SSHFS version 2.10.0 FUSE library version: 2.9.9 fusermount version: 2.9.9 using FUSE kernel interface version 7.19
ããŠã³ãå ã®ãã£ã¬ã¯ããªãäœæããŸãã
$ mkdir sshfs-mnt
ããŠã³ããsshfs [æ¥ç¶ãŠãŒã¶ãŒ@]ãã¹ãå:[ããŠã³ãããããã£ã¬ã¯ããª] [ããŠã³ããã€ã³ã]ã§è¡ããŸãã
å°ãªããšãããã¹ãåã®æå®ã¯å¿
èŠã§ããïŒSFTPãšåãã§ãïŒã
$ sshfs remote-user@192.168.33.11: sshfs-mnt
ä»åã¯ããŠãŒã¶ãŒåãšãã¹ãåã®ã¿æå®ããŠããŸãã
ä»åã¯SSHå ¬ééµèªèšŒã®èšå®ãããªãã£ãã®ã§ãã¹ã¯ãŒããèãããŸãããèšå®ããŠããã°ãã®ãŸãŸé²ã¿ãŸãã
remote-user@192.168.33.11's password:
ããŠã³ãã§ããŸããã
$ ls -l sshfs-mnt åèš 12 drwxrwxr-x 1 1001 1001 4096 5æ 11 15:49 dir1 drwxrwxr-x 1 1001 1001 4096 5æ 11 15:49 dir2 drwxrwxr-x 1 1001 1001 4096 5æ 11 15:49 dir3
ä»åã¯ããŠã³ãããããã£ã¬ã¯ããªãæå®ããªãã£ãã®ã§ããªã¢ãŒãã®$HOMEãã£ã¬ã¯ããªãããŠã³ãããŠããŸãã
$ ll mnt åèš 40 drwxr-xr-x 1 1001 1001 4096 5æ 11 15:50 ./ drwxr-xr-x 5 xxxxx xxxxx 4096 5æ 11 15:54 ../ -rw------- 1 1001 1001 182 5æ 11 15:52 .bash_history -rw-r--r-- 1 1001 1001 220 5æ 11 15:47 .bash_logout -rw-r--r-- 1 1001 1001 3771 5æ 11 15:47 .bashrc drwx------ 1 1001 1001 4096 5æ 11 15:48 .cache/ -rw-r--r-- 1 1001 1001 807 5æ 11 15:47 .profile -rw-r--r-- 1 1001 1001 0 5æ 11 15:50 .sudo_as_admin_successful drwxrwxr-x 1 1001 1001 4096 5æ 11 15:49 dir1/ drwxrwxr-x 1 1001 1001 4096 5æ 11 15:49 dir2/ drwxrwxr-x 1 1001 1001 4096 5æ 11 15:49 dir3/
ãã¡ã€ã«ã®ç¢ºèªã
$ cat sshfs-mnt/dir1/hello.txt hello
ãã£ã¬ã¯ããªå ã«ç§»åããŠ
$ cd sshfs-mnt/dir3
確èªã
$ ll åèš 12 drwxrwxr-x 1 1001 1001 4096 5æ 11 15:49 ./ drwxr-xr-x 1 1001 1001 4096 5æ 11 15:50 ../ -rw-rw-r-- 1 1001 1001 4 5æ 11 15:49 ssh.txt
ãã¡ã€ã«ãäœæããŠã¿ãŸãã
$ echo sshfs > sshfs.txt
äœæã§ããŸããã
$ ls -l åèš 8 -rw-rw-r-- 1 1001 1001 4 5æ 11 15:49 ssh.txt -rw-rw-r-- 1 1001 1001 6 5æ 11 15:56 sshfs.txt
ãã®ãã¡ã€ã«ã¯ãªã¢ãŒãåŽã§æžãæããããã§ããŸãã
$ echo test > dir3/sshfs.txt
å床ãããŠã³ãããåŽã§èŠãŠã¿ããšåæ ãããŠããŸãã
$ cat sshfs.txt test
ã€ãŸããSSHFSã§ããŠã³ãããæã«æå®ãããŠãŒã¶ãŒã®æš©éã§ãããŠã³ããããã£ã¬ã¯ããªå ã§èªã¿æžãããŠããããšã«ãªããŸããã
ããŠã³ããããã£ã¬ã¯ããªããåºãŠ
$ cd ../..
ã¢ã³ããŠã³ããã¢ã³ããŠã³ãã¯ãfusermountã§è¡ããŸãã
$ fusermount -u sshfs-mnt
ãšããã§ãå ã»ã©ã¯ãããªæãã§ããŠã³ãããŸããã
$ sshfs remote-user@192.168.33.11: sshfs-mnt
æ«å°Ÿã®:ãå¿ãããšãã¡ãã£ãšäžæè°ãªãšã©ãŒã«ãªããŸãã
$ sshfs remote-user@192.168.33.11 sshfs-mnt missing host see `sshfs -h' for usage
æ¥ç¶æã®æå®ã¯[user@]host:[dir]ã§ã:ãŸã§ã¯å¿
é ã§ãã
$ sshfs --help usage: sshfs [user@]host:[dir] mountpoint [options]
æåãèŠäºã«èžã¿ãŸããã
:ã®åŸãã«ã¯ãã£ã¬ã¯ããªãæå®ã§ããŸããçžå¯Ÿãã¹ã§æžããšããªã¢ãŒãã®$HOMEãã£ã¬ã¯ããªããã®çžå¯Ÿãã¹ã«ãªããŸãã
$ sshfs remote-user@192.168.33.11:dir3 sshfs-mnt
äžã®äŸã§ã¯ãdir3ãã£ã¬ã¯ããªãããŠã³ãããŠããŸãã
$ ls -l sshfs-mnt åèš 8 -rw-rw-r-- 1 1001 1001 4 5æ 11 15:49 ssh.txt -rw-rw-r-- 1 1001 1001 5 5æ 11 15:57 sshfs.txt
絶察ãã¹ã§æžããŠãOKã§ãã
$ sshfs remote-user@192.168.33.11:/home/remote-user/dir3 sshfs-mnt
ãªãã·ã§ã³ã«ã€ããŠããããããããŸãããä»åã¯ãã¹âŠã
$ sshfs --help
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
[no]rename fix renaming to existing file (default: off)
[no]truncate fix truncate for old servers (default: off)
[no]buflimit fix buffer fillup bug in server (default: on)
[no]fstat fix fstat for old servers (default: off)
-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:
[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)
[subdir]
-o subdir=DIR prepend this directory to all paths (mandatory)
-o [no]rellinks transform absolute symlinks to relative
ä»åã¯ãããŸã§ã«ããŠãããŸãããå ã«ãæžããŸãããOSèµ·åæã«ããŠã³ããããå Žåã¯ãã¡ãã
archlinux / SSHFS / èªåããŠã³ã
ãŸãšã
SSHFSã詊ããŠã¿ãŸããã
å²ãšç°¡åã«äœ¿ããã®ãšãçšæã®æ·å±
ãäœããŠè¯ãã§ããã
ã¡ãã£ãšãããªã¢ãŒããã¡ã€ã«ã·ã¹ãã ãšããŠãç°¡åã«å©çšããåã«ã¯ç¥ã£ãŠãããšäŸ¿å©ãªã®ããªããšæããŸãã