Russian English German Ukrainian

Компьютерная помощь

(066) 72-00-654     (098) 44-74-068

г. Днепр

ж/м Левобережный-3

SSHFS: монтирование удаленной папки

 

SSHFS – это клиент SSH, который позволяет смонтировать файловую систему удаленного сервера в любую (существующую) папку локальной файловой системы вашего компьютера.
После подключения при помощи sshfs к удаленному серверу, вы можете работать с файлами на нем, как будто они расположены в вашей домашней папке. Соответственно, с ними можно производить любые операции, как с любыми другими файлами в вашей локальной файловой системе. При этом все данные передаются зашифрованными. Ваши приложения даже не будут догадываться, что они работают с файлами, которые, может быть, находятся на другом конце света! Удобно, не так ли?

Установка

Установка

sshfs можно установить при помощи менеджера пакетов Synaptic либо набрать команду в терминале:

sudo apt-get install sshfs

 

Настройка

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

fuse: failed to open /dev/fuse: Permission denied

Чтобы добавить пользователя в группу fuse, выполните в консоли команду:

sudo usermod -a -G fuse user

где user – логин вашего пользователя. После этого нужно перелогиниться, чтобы попасть в группу fuse.

Добавить своего пользователя в группу fuse можно также при помощи графической среды GNOME.

  • Откройте меню Система
  • Администрирование
  • Пользователи и группы
  • В появившемся окне со списком пользователей нажмите на небольшую кнопку с изображением ключей "Нажмите для внесения изменений", введите пароль
  • Выберите своего пользователя и щелкните по кнопке Свойства.
  • В появившемся окне, Свойства Учетной Записи, откройте закладкуПривилегии пользователя
  • Поставьте галочку Монтировать пользовательские файловые системы (FUSE)
  • Сохраните изменения, нажав кнопку OK.
  • Не забудьте перелогиниться, чтобы попасть в группу fuse.



Монтирование

Монтирование файловой системы удаленного сервера при помощи sshfs выполняется следующей командой:

sshfs -C -p 22 :/ /home/user/mnt/example.com
  • user заменяем на имя пользователя в системе к которой подлючаемся.
  • example.com заменяем на доменное имя либо IP адрес системы к которой подключаемся.
  • / заменяем на путь к директории на сервере которую вы хотите примонтировать.
  • /home/user/mnt/example.com заменяем на путь к ранее созданной директории, в которую будет монтироваться файловая система с сервера. Обратите внимание, что папка, в которую монтируется удаленная файловая система, должна существовать.
  • Опция -C сообщает sshfs, чтобы он сжимал передаваемые данные
  • Опция -p задает номер рабочего порта. Эту опцию можно опустить, если это стандартный порт SSH (22).


Во время установки соединения sshfs спросит у вас пароль пользователя для подключения к серверу. Если имя пользователя и пароль указаны верно и нет проблем с доступом к папке в которую монтируется файловая система, клиент sshfs не выдаст никаких сообщений после успешного монтирования ФС удаленного сервера.

Размонтирование

Отмонтировать файловую систему удаленного сервера можно следующей командой:

fusermount -u /home/user/mnt/example.com

 

Полезный совет

Для более удобной работы с sshfs можно использовать скрипты Bash. Они позволяют несколько упростить работу с sshfs. Пример кода скрипта:

#!/bin/bash

MOUNT_PATH=/home/user/mnt/example.com

if [ "$1" = "-u" ]; then
    fusermount -u -z $MOUNT_PATH
else
    sshfs -C :/home/user/public_html $MOUNT_PATH
fi

Естественно скрипт перед запуском нужно видоизменить под свои нужды и не забыть сделать запускаемым.

Чтобы смонтировать файловую систему удаленного сервера в локальную папку /home/user/mnt/example.com, я запускаю скрипт  без параметров, указываю пароль и работаю:

./

Когда нужно отключится, я запускаю скрипт с параметром -u и клиент sshfs немедленно рвет соединение с удаленным сервером:

./ -u

Авто авторизация SSH

В основе, авторизация по RSA ключу через ssh и скрипт выполняющийся при старте системы.

На клиентской машине... Генерируем RSA ключи:

ssh-keygen -t rsa

Скрипт нам начинает задавать вопросы:


1. Enter file in which to save the key (/home/user/.ssh/id_rsa): - нажимаем enter, нам ключи нужны именно в этой директории.
2. Enter passphrase (empty for no passphrase): - нажимаем enter, пароль мы использовать не будем.
3. Enter same passphrase again: - жмем enter, ведь мы не используем пароль.

Скрипт создал 2 ключа: приватный и публичный.

1. Your identification has been saved in /home/user/.ssh/id_rsa. - секретный приватный ключ для декодирования.
2. Your public key has been saved in /home/user/.ssh/id_rsa.pub. - публичный ключ для кодирования.

Теперь скопируем с клиента на сервер публичный ключ:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

Всё. Теперь попробуем залогиниться:

ssh user@server

У меня, почему-то только в новом терминале после этого подключается.

Как настроить авто монтирование SSHFS

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

Создадим скрипт(поправьте его под себя):

#!/bin/bash

MOUNT_PATH=/home/user/mnt/example.com

if [ "$1" = "-u" ]; then
    fusermount -u -z $MOUNT_PATH
else
    sshfs -C :/home/user/public_html $MOUNT_PATH
fi

У меня такой файл находится по адресу /storage/script/sshfs/kurush.

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

sudo nano /etc/rc.local

Добавим перед exit 0:

sudo -u user -H /storage/script/sshfs/kurush

Где user пользователь от имени которого запускается скрипт.

Автозагрузка

Создаём исполняемый файл mount.sh в корне диска:

cd /
sudo nano mount.sh
sudo chmod +x mount.sh

Добовляем команду в mount.sh:

echo 'password' | sshfs :/somedir /somemydir -o password_stdin,nonempty

,где
password - тот самый пароль для удаленного сервера;
password_stdin - опция которая принимает пароль передаваемый, в данном случае, через echo.
nonempty - добовляем опцию если папка куда монтируем не пустая

Конечно, в этом случае пароль передается в открытом виде, но никто не мешает запихнуть эту команду в скрипт, которому присвоить нужные права, а потом этот скрипт добавить в автозагрузку.

Команду можно добавить в /etc/rc.local или crontab добавив строку sudo crontab -u root -e:

@reboot sh /moun.sh

Установка 2

Установка и использование

1. Устанавливаем sshfs:

sudo apt-get install sshfs

2. Теперь монтируем удаленную папку (примерно так):

sshfs :/somedir /somemydir -o uid=1000,gid=1000

,где
user - имя пользователя на удаленном сервере;
remote.host - адрес удаленного сервера;
/somedir - папка на удаленном сервере, которая будет монтироваться;
/somemydir - папка на вашем компьютере, куда будет монтироваться удаленная папка;
-o uid=1000,gid=1000 - различные параметры монтирования (подробнее смотрите в man).
Понятное дело, все приведенные выше значения вы меняете под себя.

3. Отмонтируется все это дело, следующей командой:

fusermount -u /somemydir

4. Добавляем автомонтирование при загрузке системы через /etc/fstab. Для этого редактируем его:

sudo nano /etc/fstab

и добавляем туда строку (пример):

sshfs#:/somedir /somemydir fuse uid=1000,gid=1000 0 0

Монтирование, если просит пароль

1. В большинстве случаев, автомонтирование не прокатит, так как запрашивается пароль при монтировании, а такие опции, как password и credentials для sshfs - не катят. поэтому есть, как минимум, два варианта это поправить.
1.1. Первый - это использование RSA или DSA ключей для ssh соединения (про это я уже раньше упоминал в другой статье).
1.2. Второй - просто не парится всякими fstab, а просто добавить в автозагрузку 'Система'->'Параметры'->'Сеансы' запуск следующей команды:

echo 'password' | sshfs :/somedir /somemydir -o password_stdin,nonempty,allow_other

,где

password - тот самый пароль для удаленного сервера;
password_stdin
- опция которая принимает пароль передаваемый, в данном случае, через echo;
nonempty
- добовляем опцию если папка куда монтируем не пустая;
allow_other
- разрешение всем пользователям.

Конечно, в этом случае пароль передается в открытом виде, но никто не мешает запихнуть эту команду в скрипт, которому присвоить нужные права, а потом этот скрипт добавить в автозагрузку.

Проблема при монтировании

Вариант 1

1. Бывает, что при монтировании выскакивает ошибка:

read: Connection reset by peer

в этом случае надо удалить в домашней папке и папке /root файл:

/home/user/.ssh/known_hosts

Все теперь ошибка не должна появляться снова, только в этот раз - появится предложение на ввод пароля для добавления ключа этого адреса в ваш список.

Вариант 2

1. Бывает, что при монтировании выскакивает ошибка:

read: Connection reset by peer

в этом случае надо послать на адрес, к которому коннектимся, какой-нить текст:

ssh  echo text

в ответ вы получите сообщение, из которого вас интересуют строки похожие на эти:

Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:2

нас интересует именно последняя цифра, это номер строки, которую нам надо удалить, в данном случае - 2.

2. Удаляем в файле known_hosts найденную строку:

sed -i -e '2d' /home/user/.ssh/known_hosts

3. Снова отправляем на адрес, к которому коннектимся, строку:

ssh  echo text

только в этот раз - появится предложение на ввод пароля для добавления ключа этого адреса в ваш список.
Все теперь ошибка не должна появляться снова.

Проблема: sshfs и svn

1. При работе с sshfs столкнулся с такой проблемой, что когда пытаешься работать с svn на примонтированной папке, например делать checkout, то получаешь следующую ошибку:

svn: Can't move '.svn/tmp/entries' to '.svn/entries': Operation not permitted

2. Лечится это, добавлением опции workaround=rename при монтировании. Пример:

sshfs :/somedir /somemydir -o workaround=rename,uid=1000,gid=1000

  • Сборка ПК для дома и офиса

  • Бесплатная диагностика

  • Гарантия

  • Самые низкие цены