Поиск по блогу :

    10 ноября 2008 г.

    Монтирование удаленной папки с помощью sshfs

    Недавно возникла необходимость использовать удаленный сервер, чтобы удаленно работать там с проектами из svn. Доступ к серверу, только через ssh. Конечно работать с svn можно прям на удаленной машине, но вот с файлами мне проще работать на своей машине. Поэтому я и решил подключить себе нужную папку с удаленного сервера, как примонтированный диск, чтобы проводимые мною изменения сразу писались удаленно на сервер, без лишних, в дальнейшем, телодвижений.


    Так как у меня, есть только подключение через ssh, поэтому для монтирования удаленной папки я использовал файловую систему SSHFS (Secure SHell FileSystem).

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

    1. Устанавливаем sshfs:
    $
    sudo apt-get install sshfs

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

    sshfs user@remote.host:/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#user@remote.host:/somedir /somemydir fuse uid=1000,gid=1000 0 0

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

    1. В большинстве случаев, автомонтирование не прокатит, так как запрашивается пароль при монтировании, а такие опции, как password и credentials для sshfs - не катят. поэтому есть, как минимум, два варианта это поправить.
    1.1. Первый - это использование RSA или DSA ключей для ssh соединения (про это я уже раньше упоминал в другой статье).
    1.2. Второй - просто не парится всякими fstab, а просто добавить в автозагрузку 'Система'->'Параметры'->'Сеансы' запуск следующей команды
    echo 'password' | sshfs user@remote.host:/somedir /somemydir -o password_stdin
    где
    password - тот самый пароль для удаленного сервера;
    password_stdin - опция которая принимает пароль передаваемый, в данном случае, через echo.
    Конечно, в этом случае пароль передается в открытом виде, но никто не мешает запихнуть эту команду в скрипт, которому присвоить нужные права, а потом этот скрипт добавить в автозагрузку.

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

    1. Бывает, что при монтировании выскакивает ошибка
    read: Connection reset by peer
    в этом случае надо послать на адрес, к которому коннектимся, какой-нить текст
    $
    ssh user@remote.host 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 user@remote.host 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 user@remote.host:/somedir /somemydir -o workaround=rename,uid=1000,gid=1000