Поиск по сайту:

Как использовать SSHFS для монтирования удаленных файловых систем через SSH


Введение

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

В качестве альтернативы вы можете установить SSHFS, чтобы смонтировать удаленный каталог, используя только SSH. Это имеет значительное преимущество, поскольку не требует дополнительной настройки и наследует разрешения от пользователя SSH в удаленной системе. SSHFS особенно полезен, когда вам нужно читать из большого набора файлов в интерактивном режиме на индивидуальной основе.

Предпосылки

  • Два сервера Linux, которые настроены на доступ SSH между собой. Одним из них может быть локальный компьютер, а не облачный сервер. Этого можно добиться, следуя нашему Руководству по начальной настройке сервера, подключившись напрямую с одного компьютера на другой.

Шаг 1 — Установка SSHFS

SSHFS доступен для большинства дистрибутивов Linux. В Ubuntu вы можете установить его с помощью apt.

Во-первых, используйте apt update, чтобы обновить источники пакетов:

  1. sudo apt update

Затем используйте apt install для установки пакета sshfs.

  1. sudo apt install sshfs

Примечание. SSHFS можно установить на Mac или Windows с помощью библиотек файловой системы, называемых FUSE, которые обеспечивают взаимодействие со средами Linux. В них будут использоваться те же концепции и сведения о подключении, что и в этом руководстве, но может потребоваться использование других интерфейсов конфигурации или установка сторонних библиотек. В этом руководстве рассматривается SSHFS только в Linux, но вы сможете адаптировать эти шаги к реализациям FUSE для Mac или Windows.

Вы можете установить SSHFS для Windows из репозитория GitHub проекта.

Вы можете установить SSHFS для Mac из проекта macFUSE.

Шаг 2 — Монтирование удаленной файловой системы

Всякий раз, когда вы монтируете удаленную файловую систему в среде Linux, вам сначала нужен пустой каталог для ее монтирования. Большинство сред Linux включают каталог с именем /mnt, в котором вы можете создавать подкаталоги для этой цели.

Примечание. В Windows удаленные файловые системы иногда монтируются с собственной буквой диска, например G:, а в Mac они обычно монтируются в каталог /Volumes.

Создайте в /mnt подкаталог с именем droplet с помощью команды mkdir:

  1. sudo mkdir /mnt/droplet

Теперь вы можете смонтировать удаленный каталог с помощью sshfs.

  1. sudo sshfs -o allow_other,default_permissions sammy@your_other_server:~/ /mnt/droplet

Параметры этой команды ведут себя следующим образом:

  • -o предшествует различным параметрам монтирования (это то же самое, что и при обычном запуске команды mount для монтирования диска без SSH). В этом случае вы используете allow_other, чтобы разрешить другим пользователям доступ к этому монтированию (чтобы оно вело себя как обычное монтирование диска, поскольку sshfs по умолчанию предотвращает это). и default_permissions (чтобы в противном случае использовались обычные разрешения файловой системы).
  • sammy@your_other_server:~/ предоставляет полный путь к удаленному каталогу, включая удаленное имя пользователя, sammy, удаленный сервер, ваш_другой_сервер и путь, в данном случае ~/ для домашнего каталога удаленного пользователя. Здесь используется тот же синтаксис, что и в SSH или SCP.
  • /mnt/droplet — это путь к локальному каталогу, используемому в качестве точки подключения.

Если вы получили сообщение Connection reset by peer, убедитесь, что вы скопировали свой SSH-ключ в удаленную систему. sshfs использует обычное соединение SSH в фоновом режиме, и если вы впервые подключаетесь к удаленной системе через SSH, вам может быть предложено принять отпечаток ключа удаленного хоста.

Output
The authenticity of host '164.90.133.64 (164.90.133.64)' can't be established. ED25519 key fingerprint is SHA256:05SYulMxeTDWFZtf3/ruDDm/3mmHkiTfAr+67FBC0+Q. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Примечание. Если вам нужно смонтировать удаленный каталог с помощью SSHFS, не требуя разрешений sudo, вы можете создать группу пользователей с именем fuse на локальном компьютере с помощью sudo groupadd fuse, а затем добавьте своего локального пользователя в эту группу с помощью sudo usermod -a -G fuse sammy.

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

  1. ls /mnt/droplet
Output
remote_file1 remote_file2

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

Важно отметить, что команда mount монтирует удаленный диск только для текущего сеанса. Если виртуальный сервер или локальная машина выключены или перезапущены, вам потребуется использовать тот же процесс для повторного подключения.

Если вам больше не нужно это монтирование, вы можете размонтировать его с помощью команды umount:

  1. sudo umount /mnt/droplet

На последнем шаге вы ознакомитесь с примером настройки постоянного монтирования.

Шаг 3 — Постоянное монтирование удаленной файловой системы

Как и в случае с другими типами дискового и сетевого монтирования, постоянное монтирование можно настроить с помощью SSHFS. Для этого вам нужно добавить запись конфигурации в файл с именем /etc/fstab, который обрабатывает монтирование файловой системы Linux при запуске.

Используя nano или ваш любимый текстовый редактор, откройте /etc/fstab:

  1. sudo nano /etc/fstab

В конце файла добавьте такую запись:

sammy@your_other_server:~/ /mnt/droplet fuse.sshfs noauto,x-systemd.automount,_netdev,reconnect,identityfile=/home/sammy/.ssh/id_rsa,allow_other,default_permissions 0 0

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

  • sammy@your_other_server:~/ снова является удаленным путем, как и раньше.
  • /mnt/droplet снова является локальным путем.
  • fuse.sshfs указывает драйвер, используемый для монтирования этого удаленного каталога.
  • noauto,x-systemd.automount,_netdev,reconnect — это набор параметров, которые работают вместе, чтобы гарантировать, что постоянное монтирование на сетевые диски ведет себя корректно в случае, если сетевое подключение обрывается с локального компьютера или удаленная машина.
  • identityfile=/home/sammy/.ssh/id_rsa указывает путь к локальному ключу SSH, чтобы удаленный каталог можно было смонтировать автоматически. Обратите внимание, что в этом примере предполагается, что ваше локальное и удаленное имя пользователя — sammy — это относится к локальному пути. Это необходимо указать, потому что /etc/fstab эффективно работает от имени пользователя root и иначе не знал бы, какие конфигурации SSH имени пользователя проверять на наличие ключа, которому доверяет удаленный сервер.
  • allow_other,default_permissions используют те же разрешения, что и команда mount выше.
  • 0 0 означает, что удаленная файловая система никогда не должна сбрасываться или проверяться локальным компьютером в случае ошибок. Эти параметры могут отличаться при монтировании локального диска.

Сохраните и закройте файл. Если вы используете nano, нажмите Ctrl+X, затем, когда будет предложено, Y и затем ENTER. Затем вы можете протестировать конфигурацию /etc/fstab, перезапустив локальный компьютер, например, используя sudo reboot now, и убедившись, что монтирование воссоздано автоматически.

Следует отметить, что постоянные монтирования SSHFS не обязательно популярны. Природа соединений SSH и SSHFS означает, что они обычно лучше подходят для временных одноразовых решений, когда вам не нужно фиксировать монтирование SMB или NFS, которое можно настроить с большей избыточностью и другими параметрами. Тем не менее, SSHFS очень гибок и, что более важно, действует как полноценный драйвер файловой системы, что позволяет вам настроить его в /etc/fstab, как и любое другое монтирование диска, и использовать его столько раз, нужный. Будьте осторожны, чтобы случайно не открыть через SSH больше удаленной файловой системы, чем вы намеревались.

Заключение

В этом руководстве вы настроили монтирование SSHFS из одной среды Linux в другую. Хотя это не самое масштабируемое и производительное решение для производственного развертывания, SSHFS может быть очень полезным при минимальной настройке.

Далее вы можете узнать о работе с объектным хранилищем, которое можно монтировать одновременно на нескольких серверах.