ããã¯ããªã«ãããããŠæžãããã®ïŒ
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ã詊ããŠã¿ãŸããã
å²ãšç°¡åã«äœ¿ããã®ãšãçšæã®æ·å±
ãäœããŠè¯ãã§ããã
ã¡ãã£ãšãããªã¢ãŒããã¡ã€ã«ã·ã¹ãã ãšããŠãç°¡åã«å©çšããåã«ã¯ç¥ã£ãŠãããšäŸ¿å©ãªã®ããªããšæããŸãã