SSHFS: файловая система удаленного сервера в вашей домашней папке
Debian, SSH, Ubuntu 03.01.2008sshfs - это клиент SSH?, который позволяет смонтировать файловую систему (или папку) удаленного сервера в любую (существующую) папку локальной файловой системы вашего компьютера.
Вообще, для GNU/Linux хватает клиентов SSH. Однако все они ограничиваются тем, что позволяют производить только базовые операции с файлами: копирование, перенос, удаление.
На мой взгляд, sshfs - незаменимое средство для любого веб-программиста (работающего с GNU/Linux), превосходящее на голову все (испробованные мной) клиенты SSH. Только представьте себе: после подключения при помощи sshfs к удаленному серверу, вы можете работать с файлами на нем, как будто они расположены в вашей домашней папке. Соответственно, с ними можно производить любые операции, как с любыми другими файлами в вашей локальной файловой системе: копировать, редактировать, сравнивать при помощи Meld Diff Viewer или искать в них текст при помощи regexxer Search Tool. При этом все данные передаются зашифрованными. Ваши приложения даже не будут догадываться, что они работают с файлами, которые, может быть, находятся на другом конце света! Удобно, не так ли?
УСТАНОВКА
Клиент sshfs входит в дистрибутивы Ubuntu 7.10, 7.04 и дистрибутив Debian Etch. Думаю, что он есть и в предыдующих версиях Ubuntu/Debian (однако я не проверял). И наверняка sshfs будет включен во все последующие дистрибутивы Ubuntu/Debian.
Установка клиента sshfs элементарна, как и установка любого приложения из пакета для Ubuntu/Debian. 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. Откройте меню System -> Administration -> Users and Groups. В появившемся окне со списком пользователей выберите своего пользователя и щелкните по кнопке Properties. В появившемся окне (Account Properties) откройте закладку User Privileges и поставьте галочку Allow user of fuse filesystems like LTSP Thin Client blockdevices. Сохраните изменения, нажав кнопку OK. Не забудьте перелогиниться, чтобы попасть в группу fuse.
ИСПОЛЬЗОВАНИЕ
Монтирование файловой системы удаленного сервера при помощи sshfs выполняется следующей командой:
sshfs -C -p 22 user@example.com:/ /home/user/mnt/example.com
Опция -C сообщает sshfs, чтобы он сжимал передаваемые данные, а опция -p задает номер рабочего порта. Номер порта можно опустить, если это стандартный порт SSH (22).
Обратите внимание, что папка /home/user/mnt/example.com, в которую монтируется удаленная файловая система, должна существовать.
Во время установки соединения sshfs спросит у вас пароль пользователя для подключения к серверу. Если имя пользователя и пароль указаны верно и нет проблем с доступом к папке /home/user/mnt/example.com, клиент sshfs не выдаст никаких сообщений после успешного монтирования ФС удаленного сервера.
Отмонтировать файловую систему удаленного сервера можно следующей командой:
fusermount -u /home/user/mnt/example.com
ПОЛЕЗНЫЙ СОВЕТ
Для более удобной работы с sshfs я использую свои скрипты Bash?. Они позволяют мне несколько упростить работу с sshfs. См. пример кода скрипта user@example.com.sh ниже.
#!/bin/bash
MOUNT_PATH=/home/user/mnt/example.com
if [ "$1" = "-u" ]; then
fusermount -u -z $MOUNT_PATH
else
sshfs -C user@example.com:/home/user/public_html $MOUNT_PATH
fi
Чтобы смонтировать файловую систему удаленного сервера в локальную папку /home/user/mnt/example.com, я запускаю скрипт user@example.com.sh без параметров, указываю пароль и работаю.
/home/user/mnt/user@example.com.sh
Когда нужно отключится, я запускаю скрипт с параметром -u и клиент sshfs немедленно рвет соединение с удаленным сервером.
/home/user/mnt/user@example.com.sh -u
30.05.2008 в 15:04
На самом деле, чтобы каждый раз не вводить пароль (ну или вводить всегда один, для всех серверов), гораздо удобнее использовать для этого авторизацию по ключу.
P.S. Regexxer Search Tool Вы делаете? Его можно использовать в традиционном Unix Way в коммандной строке, в пайпе? И вообще, на скрин смотрел, там даже многострочный текст нельзя ввести на замену? Я тут для себя писал подобную консольную вещь http://ru.bir.ru/viewtopic.php?f=25&t=652 может будет полезным - не сочтите за рекламу особо.
13.06.2008 в 09:30
Нет, Regexxer не я делаю
спасибо, за комментарий.
04.09.2008 в 15:32
[…] Материал для статьи взят из следующих источников: 1, 2 и немного подправлен под […]
21.01.2010 в 12:16
спасибо, за очень ценный пост, я даже и не подозревал о таких возможностях убунты…
16.05.2010 в 15:29
У меня убунту 7.04 и, прочитав статью, я хотела последовать вашим советам. Однако система сообщила, что “пакет не установлен” (т.е. получается он не входит в дистрибутив)
Командой же ssh -C -p 22 user@example.com подключилась к удаленному серверу без проблем и выполнила все нужные операции.
А в общем-то статья хорошая. Спасибо.
17.05.2010 в 12:43
Наталья, видимо у вас не подключены все репозитории Убунту. Откройте Software Sources (System -> Administration) и поставьте все галочки Downloadable from Internet. После этого, когда нажмете кнопку Close, система предложит обновить информацию о приложениях из репозиториев. Тогда sshfs будет доступна для установки.