Файловая система SSHFS: установка и настройка для Linux

Для перемещения файлов между различными хостами поверх SSH-соединения часто используется утилита scp или ее аналоги. Если нам необходимо переместить целые каталоги или файловые системы между удаленными хостами, имеет смысл использовать программу SSHFS (Secure SHell FileSystem), речь о которой пойдет в этой статье.

С помощью SSHFS вы можете примонтировать удаленную директорию, используя только SSH. Главное преимущество – не требуется выполнять дополнительные настройки на удаленном хосте, как в случае с протоколами SMB или NFS. Правильная настройка SSHFS позволяет выполнять автоматическое монтирование при старте системы или при обращении к каталогу, подробнее – в соответствующем разделе.

Установка SSHFS

Перед началом работы установите пакет SSHFS. Рассмотрим установку в популярных дистрибутивах.

В Ubuntu вы можете установить SSHFS следующим образом:

sudo apt update
sudo apt install sshfs

Fedora:

dnf install fuse-sshfs

Arch Linux:

sudo pacman -S sshfs

Проверим корректность установки:

$ sshfs -V  
SSHFS version 3.7.3 FUSE library version 3.17.1 using FUSE kernel interface version 7.40 fusermount3 version: 3.17.1

Монтирование и размонтирование удаленной файловой системы

После установки SSHFS можно приступить к монтированию файловой системы, но перед этим создадим каталог, в который она будет примонтирована:

mkdir /home/user/beget

Перед монтированием директории мы рекомендуем настроить автоматическую авторизацию по SSH, инструкция приведена в статье.

Команда для монтирования следующая:

sshfs пользователь@хост:директория <точка монтирования>

Укажите пользователя и хост для подключения, а после знака “:” – директорию на удаленном сервере, которую необходимо примонтировать. Далее укажите точку монтирования, в нашем случае – созданный каталог /home/user/beget:

$ sshfs betutorial@betutorial.beget.tech:/home/b/betutorial /home/user/beget -o reconnect,compression=yes,cache=yes,auto_cache

После флага “-o” перечислены дополнительные опции. Рассмотрим назначение каждого параметра:

  • reconnect – повторное монтирование при обрыве соединения;
  • compression=yes – активируем сжатие для экономии трафика;
  • cache=yes – активируем локальное кэширование файлов;
  • auto_cache – активируем автоматическое управление кэшем.

Если для подключения по SSH используется нестандартный порт, укажите его после флага “-p”, например:

$ sshfs betutorial@betutorial.beget.tech:/home/b/betutorial /home/user/beget -o -p 4146 -o reconnect,compression=yes,cache=yes,auto_cache

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

Для размонтирования файловой системы используйте команду fusermount3:

fusermount3 -u <точка монтирования>

Либо umount:

umount <точка монтирования>

Настройка отображения владельцев файлов

Монтируя удаленную файловую систему, для удобства мы можем заменить отображаемого владельца файла на локального пользователя. Добавьте параметр idmap=user, чтобы в качестве владельца отображался текущий пользователь:

$ sshfs betutorial@betutorial.beget.tech:/home/b/betutorial /home/user/beget -o idmap=user,reconnect,compression=yes,cache=yes,auto_cache

Либо укажите локального пользователя (uid) и/или группу (gid) вручную (допишите опцию в конце команды):

-o uid=1000,gid=1000

Теперь в примонтированной файловой системе в качестве владельца файлов и директорий вместо удаленного пользователя betutorial будет отображаться локальный пользователь user.

-rwx------ 1 user user    6 Sep 27  2024 test.txt

Чтобы сопоставить несколько пользователей и групп, создайте файлы uid-mapping для пользователей и gid-mapping для групп. Содержимое файлов должно быть следующее:

<имя пользователя/группы на локальном хосте>:<id пользователя/группы на удаленном хосте>

Например:

$ cat uid-mapping 
office:1571 
betutorial:627

Аналогично gid-mapping:

$ cat gid-mapping 
office:1571 
betutorial:627

Другие пользователи не должны иметь возможность перезаписывать файлы, поэтому выставим на них права:

chmod 644 uid-mapping
chmod 644 gid-mapping

Команда для подключения будет выглядеть следующим образом (если файлы mapping находятся в другой директории, укажите абсолютный путь к ним):

$ sshfs betutorial@betutorial.beget.tech:/home/b/betutorial /home/user/beget -o idmap=file -o uidfile=uid-mapping,gidfile=gid-mapping,reconnect,compression=yes,cache=yes,auto_cache

Отображение владельцев файлов изменено согласно таблицам:

drwx------ 1 office office 4.0K May 30 11:13 lib 
drwx------ 1 betutorial betutorial 4.0K May 30 11:14 log

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

Теперь рассмотрим, как настроить автоматическое монтирование: как при запуске системы, так и при обращении к директории.

Автоматическое монтирование выполняется от лица пользователя root. Если для него не настроена автоматическая авторизация, вы можете добавить параметр IdentityFile, чтобы указать путь к ключу, который необходимо использовать для аутентификации.

Обратите внимание!
Необходимо примонтировать удаленное хранилище от лица суперпользователя хотя бы один раз, чтобы подписи хоста были добавлены в файл known_hosts.

При запуске системы

Чтобы удаленная файловая система автоматически монтировалась при старте, добавьте в файл /etc/fstab строку следующего типа:

betutorial@betutorial.beget.tech:/home/b/betutorial /home/user/beget fuse.sshfs defaults,allow_other,IdentityFile=/home/betutorial/.ssh/id_ed25519,reconnect,compression=yes,cache=yes,auto_cache  0 0

Рассмотрим добавленные параметры:

  • defaults – параметр монтирования по умолчанию;
  • _netdev – параметр сообщает, что монтируемое устройство следует рассматривать как сетевое;
  • allow_other – разрешаем другим пользователям доступ к примонтированной файловой системе;
  • IdentityFile – путь к файлу ключа, который будет использован для аутентификации.

Для проверки перезагрузите системные демоны:

systemctl daemon-reload

Затем выполните монтирование:

mount -a

Для проверки посмотрите содержимое директории или найдите примонтированную файловую систему, выполнив команду mount:

$ mount | grep sshfs
betutorial@betutorial.beget.tech:/home/b/betutorial on /home/user/beget type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

Файловая система смонтирована.

При обращении к директории

Вы также можете настроить автоматическое монтирование при выполнении запроса к директории, строка в fstab будет следующая:

betutorial@betutorial.beget.tech:/home/b/betutorial on /home/user/beget type fuse.sshfs noauto,x-systemd.automount,allow_other,IdentityFile=/home/betutorial/.ssh/id_ed25519,reconnect,compression=yes,cache=yes,auto_cache  0 0

Здесь важны следующие параметры:

  • noauto – отключает автоматическое монтирование при старте системы;
  • x-systemd.automount – включает автомонтирование при обращении.

Аналогично предыдущему пункту перезагружаем системные демоны:

systemctl daemon-reload

Далее необходимо запустить сервис, отвечающий за монтирование. Сперва найдем его в списке:

$ systemctl list-unit-files --type automount 
UNIT FILE                         STATE     VENDOR PRESET home-user-beget.automount      generated 	-
proc-sys-fs-binfmt_misc.automount static   

Нас интересует home-user-beget.automount:

systemctl restart home-user-beget.automount

Проверяем:

$ ll beget total 373M drwx------ 1 1571  601 4.0K May 30 09:24 testfile

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

На этом установка и настройка SSHFS в Linux завершены.

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем сообществе в Telegram.

0
292