sshfs: монтирование файловой системы удаленного сервера
Добавил(а) microsin
Передача файлов поверх соединения SSH с помощью протоколов SFTP или SCP - популярный метод переноса небольших объемов данных между серверами. Однако в некоторых случаях может понадобиться получить общий доступ к некоторым директориям, или ко всей файловой системе удаленного сервера. Хотя то же самое можно реализовать конфигурированием монтирования SMB или NFS, оба этих метода требуют дополнительных зависимостей и могут добавить риск нарушения безопасности или другие проблемы.
Как альтернативу можно установить утилиту SSHFS, чтобы смонтировать директорию сетевого сервера, используя только один протокол SSH. Этот способ обладает значительным преимуществом, потому что не требуется дополнительная конфигурация, и наследуются права доступа пользователя SSH на удаленной системе. Утилита SSHFS особенно полезна, когда вам нужно интерактивно просмотреть множество файлов на индивидуальной основе.
Для реализации доступа с применением SSHFS требуются два хоста Linux, сконфигурированных для доступа друг к другу по протоколу SSH. Как минимум один из них должен работать как сервер ssh, а другой как клиент ssh (на клиенте ssh запускается утилита sshfs).
Шаг 1: установка SSHFS. Утилита SSHFS доступна для большинства дистрибутивов Linux. На Ubuntu и Debian вы можете установить её с помощью менеджера пакетов apt:
$ sudo apt update
$ sudo apt install sshfs
Замечание: на Mac OS или Windows с помощью библиотек файловой системы FUSE можно обеспечить взаимодействие с рабочей средой Linux. При этом используется аналогичная концепция и метод подключения, но может потребоваться использовать другие интерфейсы конфигурирования, или может потребоваться установка сторонних библиотек. В этом руководстве рассматривается работа с sshfs только в среде Linux, но у вас должна быть возможность адаптировать эти шаги для FUSE-реализаций Mac OS или Windows.
Шаг 2: монтирование удаленной файловой системы. Всякий раз, когда вы монтируете удаленную файловую систему в рабочее окружение Linux, для этого вам нужно сначала создать пустую папку, чтобы в неё было смонтировано содержимое удаленного файлового каталога. В большинстве рабочих окружений Linux существует директория с именем /mnt, в которой для этой цели вы можете создавать подкаталоги.
Замечание: на Windows удаленные файловые системы иногда монтируются на их буквенные диски наподобие G:, и на Mac они обычно монтируются в директорию /Volumes.
Создайте подкаталог droplet в директории /mnt, используя команду mkdir:
$ sudo mkdir /mnt/droplet
Теперь вы можете смонтировать удаленную директорию в этот подкаталог, используя sshfs.
-o предшествует различным опциям монтирования. Они такие же, как используются для команды mount при монтировании обычных дисков. В этом примере опция allow_other разрешает другим пользователям получить доступ к этому монтированию (чтобы поведение точки монтирования работало так же, как и обычное монтирование диска с помощью mount, поскольку sshfs по умолчанию это запрещает), а опция default_permissions обеспечивает назначение прав доступа по умолчанию (чтобы в противном случае использовать обычные разрешения файловой системы).
sammy@your_other_server:~/ предоставляет полный путь до директории удаленного сервера. Здесь до @ указывается имя (логин) пользователя удаленного сервера, после @ указывается адрес сервера (доменное имя или IP), и после двоеточия указывается монтируемая директория удаленного сервера. В этом примере указана домашний каталог пользователя, однако иногда может понадобиться указать полный путь относительно папки корня диска /, например /home/имяпользователя. Используется такой же синтаксис, как и для SSH или SCP.
/mnt/droplet это пустая локальная директория, используемая как точка монтирования. В неё будет смонтировано и отображено содержимое удаленного каталога.
Для аутентификации на удаленном сервере потребуется пара публичный/приватный ключ, или как минимум нужно знать пароль удаленного пользователя. Если вы получаете сообщение "Connection reset by peer", то убедитесь, что скопировали свой ключ SSH на удаленную систему. Утилита sshfs использует обычное фоновое подключение по протоколу SSH, и если вы первый раз подключаетесь к удаленной системе через SSH, то может появиться запрос для принятия хэша ключа удаленного хоста (remote host key fingerprint).
Пример:
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 имяпользователя).
Чтобы использовать sshfs из скрипта bash может понадобиться каким-то образом передать пароль удаленного пользователя в командной строке. Это можно сделать с помощью опции -o password_stdin [3], например:
Как только вы успешно подключились и удаленная папка смонтирована, то вы можете работать с ней обычными командами доступа к файловой системе. Например, можно посмотреть список файлов и папок в удаленной директории:
$ ls /mnt/droplet
remote_file1 remote_file2
Теперь вы можете работать с файлами на сетевом сервера, как если бы они находились на локальной машине (с учетом, конечно, скорости сетевого подключения). Например, если вы создаете файл в директории /mnt/droplet, то этот файл появится на удаленном сервере. Так что можно копировать файлы на удаленный сервер или из него, используя точку монтирования /mnt/droplet, и передача файлов будет проходить прозрачно через соединение SSH.
Важно отметить, что команда монтирует удаленный диск для вашей текущей сессии. Если удаленный сервер или локальная машина будут выключены, то понадобится повторить тот же процесс, чтобы выполнить монтирование заново.
Если вам больше не нужна точка монтирования sshfs, то её можно отмонтировать командой umount, точно так же, как и размонтируется локальный диск:
$ sudo umount /mnt/droplet
Шаг 3: постоянное монтирование удаленной файловой системы. Как и с другими типами монтирования дисков или сетевых папок, вы можете сконфигурировать постоянное монтирование, используя SSHFS. Для этого понадобится добавить конфигурационную запись в файл /etc/fstab, который Linux обрабатывает для монтирования файловой системы в момент запуска (startup).
Откройте в текстовом редакторе (например nano) файл /etc/fstab:
$ sudo nano /etc/fstab
В конец этого файла добавьте что-нибудь наподобие следующего:
Постоянные монтирования часто требуют некоторое количество разных опций, чтобы монтирование работало надлежащим образом. В этом примере опции следующие:
sammy@your_other_server:~/ путь на сетевом сервере, как и раньше.
/mnt/droplet локальная пустая папка.
fuse.sshfs указывает драйвер, используемый для монтирования этого удаленного каталога.
noauto,x-systemd.automount,_netdev,reconnect набор опций, которые вместе обеспечивают правильную работу постоянного монтирования на сетевые диски в случае, когда сетевое соединение падает из-за проблем на локальной или удаленной машине.
identityfile=/home/sammy/.ssh/id_rsa указывает путь до локального ключа SSH, чтобы удаленная директория смонтировалась автоматически. Обратите внимание, что в этом примере подразумевается, что и на локальной, и на удаленной машине существует пользователь имяпользователя - здесь применена ссылка на локальный путь. Если необходимо указать это из-за того, что /etc/fstab эффективно обрабатывается с правами root, иначе система не будет знать, какие конфигурации имени пользователя SSH проверять, чтобы установить доверительные отношения с удаленным сервером.
allow_other,default_permissions используются те же самые настройки прав доступа, как и в команде монтирования выше.
0 0 обозначает, что удаленная файловая система никогда не должна быть сброшена или проверяться локальной машиной в случае возникновения файловых ошибок. Эти опции могут отличаться от ситуации монтирования локального диска.
Сохраните и закройте файл. Затем вы можете проверить, как отрабатывает новая конфигурация /etc/fstab путем перезагрузки локальной машины (например командой sudo reboot now). Монтирование удаленной директории должно установиться автоматически.
Следует отметить, что постоянные монтирования SSHFS нельзя считать популярной практикой. Природа SSH-соединений и SSHFS подразумевает, что процесс коммуникации должен быть временным, и проходить под контролем пользователя, когда вам не нужно связываться с монтированием SMB или NFS, которые можно настроить с большой избыточностью и другими параметрами. При этом система SSHFS очень гибкая, и что более важно - работает как полноценный драйвер файловой системы, что позволяет настраивать её через /etc/fstab наподобие любого другого диска.
[Ссылки]
1. How To Use SSHFS to Mount Remote File Systems Over SSH site:digitalocean.com. 2. How to Install 7Zip on Ubuntu site:digitalocean.com. 3. Username and password in command line with sshfs site:unix.stackexchange.com. 4. ssh: как выполнять команды на удаленном сервере.