Монтирование удаленных папок с помощью SSHFS

Монтирование удаленных папок с помощью SSHFS

Начнем с определения, согласно ArchWiki, SSHFS - клиент файловой системы на основе FUSE (filesystem in userspace) для монтирования удаленных каталогов через подключение SSH (Secure Shell).

Основные преимущества SSHFS, это простота настройки и довольно высокая степень безопасности. Из минусов стоит отметить относительно невысокую скорость передачи данных (напрямую зависит от производительности CPU) в сравнении с тем же NFS. Однако, скорость с лихвой компенсируется безопасностью передачи данных и простотой монтирования удаленных каталогов, с которыми после монтирования можно работать как с локальными.

Установка SSHFS

По умолчанию, основные дистрибутивы не комплектуются пакетом sshfs. Поэтому, установим его для начала.

Для Arch Linux и дистрибутивах базирующихся на нем:

sudo pacman -S sshfs

Для Fedora:

sudo dnf install sshfs

Ubuntu, Debian и иже с ними:

sudo apt install sshfs

OpenSUZE:

sudo zypper install sshfs

Centos:

sudo yum install fuse-sshfs 

Конфигурация сервера

Для монтирования каталогов, на сервере должен быть установлен openssh сервер. В случае простого монтирования удаленных каталогов, он не требует каких-либо дополнительных настроек. Достаточно просто установить. Ниже приведены команды установки для популярных дистрибутивов.

Arch Linux:

sudo pacman -S openssh

Fedora:

sudo dnf install openssh-server

Ubuntu/Debian:

sudo apt install openssh-server

OpenSUZE:

sudo zypper install openssh

Centos:

sudo yum install openssh-server

Теперь необходимо установить в автозагрузку и запустить SSH сервер:

sudo systemctl enable sshd.service && \
sudo systemctl start sshd.service

Проверить текущий статус сервера можно командой:

sudo systemctl status sshd.service

В ответ должно быть нечто подобное:

test@debian:~$ sudo systemctl status sshd.service 
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-07-15 19:11:59 EEST; 1h 10min ago
  Process: 666 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
  Process: 661 ExecReload=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
  Process: 373 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 402 (sshd)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/ssh.service
           └─402 /usr/sbin/sshd -D

Июл 15 19:12:01 debian sshd[402]: Server listening on :: port 22.

Конфигурация клиента

Для монтирования каталогов удаленного нам необходима локальная директория. Создадим ее для начала. Например:

mkdir ~/sshfs

Теперь в нее можно смонтировать в нее каталог удаленного сервера:

sshfs test@192.168.180.105:/home/test ~/sshfs

После выполнения команды, sshfs запросит пароль пользователя. После ввода пароля проверяем, что все смонтировано:

df -hT

Вышеуказанная команда выведет все текущие точки монтирования. Вы должны увидеть среди них что-то подобное:

test@192.168.180.105:/home/test fuse.sshfs    28G         960M   26G            4% /home/workinweb/sshfs

Также можно посмотреть содержимое каталога:

ls -lah ~/sshfs

Такой способ вполне рабочий, но не слишком удобен ввиду необходимости каждый раз вводить пароль. Чтобы каждый раз не вводить его вам необходимо скопировать на сервер свой публичный ssh ключ. Если вы его еще не генерировали до этого, то выполните:

ssh-keygen

Утилита запросит путь, по которому необходимо сохранить ключ и (можно оставить пустым) пароль. Примерный вывод:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/workinweb/.ssh/id_rsa): 
Created directory '/home/workinweb/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/workinweb/.ssh/id_rsa.
Your public key has been saved in /home/workinweb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Z11QFjl0y2E7YYoE+0Jpn+Yn/o5LbPGg/fF9q3cQ2Ug workinweb@workinweb
The key's randomart image is:
+---[RSA 2048]----+
|         ....o=B.|
|          + .oE.=|
|         = . o.X |
|        o o...+ o|
|        S.oB.  . |
|         oB + .  |
|         . B + . |
|          + = o.+|
|           ++=oo=|
+----[SHA256]-----+

Теперь можно скопировать ключ на сервер:

ssh-copy-id -i ~/.ssh/id_rsa test@192.168.180.105

Если  у вас ключ располагается по умолчанию (~/.ssh/id_rsa), то опцию -i можно опустить. Теперь при монтировании пароль не потребуется.

Удалить точку монтирования можно командой:

umount ~/sshfs

А как насчет автозагрузки? Можно через /etc/fstab, добавив туда строчку следующего вида:

USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY  /LOCAL/MOUNTPOINT  fuse.sshfs  defaults,_netdev  0  0

Но данный способ удобен для серверов, которые перезагружаются пару раз в год. В случае обычного пользовательского компьютера, например, при перезагрузке, в случае недоступности удаленной стороны это сильно замедлит загрузку, а то и вовсе сделает загрузку системы невозможной. Лучше всего для монтирования SSHFS использовать менеджеры автозагрузки предоставляемые различными графическими рабочими столами. Они настолько разные, что описывать их тут нет никакой возможности. Например, в KDE, он находится в Параметры системы >> Запуск и завершение >> Автозапуск.