Для перемещения файлов между различными хостами поверх SSH-соединения часто используется утилита scp или ее аналоги. Если нам необходимо переместить целые каталоги или файловые системы между удаленными хостами, имеет смысл использовать программу SSHFS (Secure SHell FileSystem), речь о которой пойдет в этой статье.
С помощью SSHFS вы можете примонтировать удаленную директорию, используя только SSH. Главное преимущество – не требуется выполнять дополнительные настройки на удаленном хосте, как в случае с протоколами SMB или NFS. Правильная настройка SSHFS позволяет выполнять автоматическое монтирование при старте системы или при обращении к каталогу, подробнее – в соответствующем разделе.
Установка SSHFS
Перед началом работы установите пакет SSHFS. Рассмотрим установку в популярных дистрибутивах.
В Ubuntu вы можете установить SSHFS следующим образом:
sudo apt update
sudo apt install sshfsFedora:
dnf install fuse-sshfsArch 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.