User Tools

Site Tools


sshfs

SSHFS

SSHFS (Secure SHell FileSystem) — это клиентская программа для Linux (и других операционных систем, для которых существует реализация FUSE (Filesystem in Userspace), например Mac OS X), используемая для удаленного управления файлами по протоколу SSH (точнее, его расширению SFTP) таким образом, как будто они находятся на локальном компьютере.

Подключение sshfs

Для работы файловой системы достаточно ssh доступа к удалённому серверу. На клиентской машине надо установить пакет sshfs. Если он не установлен, команда установки в Ubuntu будет выглядеть следующим образом:

sudo apt install sshfs

Синтаксис монтирования sshfs таков:

sshfs option user@ip_address:/path /path/to/mount

Например, чтобы примонтировать удалённую файловую систему по адресу 10.10.10.14 от имени пользователя root, достаточно выполнить:

sudo sshfs root@10.10.10.14:/ /mnt

Здесь мы примонтировали корневую файловую систему удаленного хоста 10.10.10.14 в директорию /mnt

Теперь можно просмотреть содержимое файловой системы. Но здесь есть одно несколько минусов, во-первых, не всегда удобно монтировать файловую систему от имени суперпользователя, а во вторых примонтированная файловая система будет доступна для чтения и записи только суперпользователю.

Чтобы получить возможность монтировать от имени обычного пользователя, необходимо создать группу fuse:

sudo groupadd fuse

Затем добавить текущего пользователя в эту группу:

sudo usermod -aG fuse $USER

После этого перелогинемся в системе, чтобы изменения вступили в силу. От имени обычного пользователя мы не сможете примонтировать sshfs в /mnt, так как нет права записи в эту директорию, создадим каталог для монтирования в домашней директории:

mkdir ~/mnt/

Теперь можно пытаться примонтировать:

sshfs root@10.10.10.14:/ ~/mnt

Теперь мы можем использовать эту директорию, для того чтобы обмениваться файлами с сервером. Если надо чтобы и другие пользователи могли получать доступ к этой папке, надо использовать опцию allow_other. Она будет работать только если в файле /etc/fuse.conf присутствует опция user_allow_other. Добавим её:

user_allow_other

Монтируем:

sshfs -o allow_other root@10.10.10.14:/ ~/mnt

Для того чтобы отмонтировать файловую систему, используем тривиальную команду umount:

sudo umount ~/mnt/

Автоматическое монтирование sshfs

Можете настроить автоматическое монтирование sshfs в файле /etc/fstab. Для этого сначала вам придется создать SSH ключ и отправить его на удалённый сервер. Создадим новый ключ и отправим его на удаленный хост:

ssh-keygen
 
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.10.14

Когда ключ будет загружен, будет достаточно передать утилите в опциях монтирования путь к ключу. Чтобы убедится, что всё работает, выполним:

sshfs -o identityfile=~/.ssh/id_dsa.pub root@10.10.10.14:/ ~/mnt

Если всё работает, можно отредактировать /etc/fstab, добавив в него следующею строку:

root@10.10.10.14:/ /mnt fuse.sshfs noauto,x-systemd.automount,_netdev,follow_symlinks,identityfile=/home/user/.ssh/id_dsa,allow_other,default_permissions,reconnect 0 0

Путь к файлу ключа должен быть полным, поэтому заменяем имя пользователя на нужного. Для того, чтобы не получать ошибок доступа при записи желательно чтобы имя пользователя на локальной машине и на удалённой совпадали. Или же, можно указать ID пользователя и группы владельца во время монтирования. Сначала посмотрите UID и GID текущего пользователя:

cat /etc/passwd | grep $USER
vasyan:x:1000:1000:vasyan:/home/vasyan:/bin/bash

В данном случае, это 1000. Первая цифра – это UID, вторая – GID. Затем передайте их в опциях монтирования uid и gid:

root@10.10.10.14:/ /mnt fuse.sshfs uid=1000,gid=1000,noauto,x-systemd.automount,_netdev,follow_symlinks,identityfile=/home/user/.ssh/id_dsa,allow_other,default_permissions,reconnect 0 0

Изменение корневого каталога

Мы можем привязать определенного пользователя к конкретной директории на удаленной системе. Это может быть выполнено путем редактирования ./etc/ssh/sshd_config:

...
Match User "someuser"
       ChrootDirectory "/chroot/%u"
       ForceCommand internal-sftp
       AllowTcpForwarding no
       X11Forwarding no
...

Владельцем chroot директории должен быть суперпользователь, иначе вы не сможете подключиться. Подробнее об ssh chroot.

sshfs.txt · Last modified: 2023/04/06 10:28 (external edit)