понедельник, 12 марта 2007 г.

SSHFS -монтирование удаленных систем через SSH.

sshfs - это утилита, основанная на FUSE (Filesystem in Userspace), которая позволяет монтировать удаленные системы и работать с ними так, как будто это файловая система на вашем компьютере (что-то на подобие /proc и /sys). Если вы читали предыдущую статью Установка и настройка NFS сервера и NFS клиента в [K]Ubuntu., то вам это покажется знакомым. В отличии от NFS, в sshfs все данные передаются через зашифрованное SSH–соединения. Но с другой стороны sshfs работает немного медленее. В любом случае, можно выделить несколько положительных сторон sshfs:

  • очень легка в использовании (не нужно ничего делать на сервере);
  • все данные передаются в зашифрованном виде;
  • хорошо работает при медленном и нестабильном соединении (пересоединяется в случае разрыва соединения);

Установка.
Как я уже говорил, ничего дополнительно на сервере делать не нужно. Все что надо, это установленный и настроеный OpenSSH. Поэтому переходим к настройкам на стороне клиента. FUSE был включен в ядро начиная лишь с версии 2.6.14. Если у вас версия ядра 2.6.14 или выше (чтобы узнать, запустите uname -r), можете вздохнуть с облегчением. Если нет, придется скопилировать модуль fuse и подключить его к ядру:

$sudo modprobe fuse
Теперь можно переходить к установке FUSE и sshfs. Если ваша система не предоставляет бинарных пакетов, вам придется скачать исходники и скомпилировать самому. Скачать можно здесь - FUSE и sshfs-fuse.

В Ubuntu или Kubuntu и Debian testing этого делать не нужно. Все сделали за вас. Нужно лишь установить пакеты:

$sudo apt-get install sshfs

(fuse поставится вместе с зависимостями)

Теперь, поскольку sshfs предназначен для использования от имени обычного пользователя (не рута), добавьте себя (возможно и других пользователей) в группу fuse:

$sudo usermod -a -G fuse имя_пользователя

После этого нужно перелогиниться чтобы попасть в группу fuse.

Использование.

Создайте точку монтирования, скажем, папку local в домашней директории

$cd ~
$mkdir local

Монтируем:

$ sshfs alien@10.52.31.1:/home/data /home/serhiy/local

(заметьте, монтирование происходит от имени обычного юзера (нет sudo перед командой монтирования))

здесь:
alien - это имя пользователя на удаленной машине
10.52.31.1 - IP удаленного компьютера
/home/data - директория на удаленном компьютере
/home/serhiy/local - точка монтирования на компьютере пользователя, куда будет монтирована /home/data.

После этого должно появиться приглашение:

The authenticity of host '10.52.31.1 (10.52.31.1)' can't be established.
RSA key fingerprint is 28:a2:c5:8c:93:db:3c:95:1c:e0:90:c8:71:7f:53:43.
Are you sure you want to continue connecting (yes/no)? yes
alien@10.52.31.1's password:

(введите пароль пользователя alien). Все. Заходим в /home/serhiy/local, гды вы должны увидеть содержимое /home/data удаленного компьютера.

Если после ввода пароля Вы увидите запись (у меня она появилась при входе с Kubuntu Edgy Eft на Kubuntu Dapper Drake):

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

это может быть связано с багом fuse. Для решения этой проблемы измените группу файла /dev/fuse на fuse:

$sudo chgrp fuse /dev/fuse

Поработав, можно и отмонтировать:

$ fusermount -u ~/local

Как я уже упомянул, после запуска команды на монтирование приходится вводить пароль SSH (если вы не настроили доступ по ключам до этого). Это не очень удобно. Поэтому, для большего удобства, настроим соединение с помощью ключей. Для этого на компьютере пользователя:
$cd ~
$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/serhiy/.ssh/id_rsa):ENTER
Enter passphrase (empty for no passphrase): ENTER
Enter same passphrase again: ENTER
Your identification has been saved in /home/serhiy/.ssh/id_rsa.
Your public key has been saved in /home/serhiy/.ssh/id_rsa.pub.
The key fingerprint is:
fa:e7:7c:e1:cb:7b:66:8b:67:07:05:99:7f:05:b9:4a
Все. Ключи были созданы в папке .ssh. После этого нужно добавить ключ id_rsa.pub в список авторизованных ключей на сервер:


$cat ~/.ssh/id_rsa.pub | ssh alien@10.52.31.1 "cat - >> .ssh/authorized_keys"

Замените alien и 10.52.31.1 на имя пользователя и IP удаленного сервера.

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

$ fusermount -u ~/local

и примонтируйте заново.

Источники:
http://linux.inet.hr/sshfs_secure_and_transparent_access_to_remote_filesystems.html
http://www.linuxjournal.com/article/8904
http://iar.spb.ru/ssh/mount

17 коммент.:

Анонимный комментирует...

Добавить пользователя в группу, это
adduser юзер группа

такой вот debian-way

Анонимный комментирует...

cat ~/.ssh/id_rsa.pub | ssh alien@10.52.31.1 "cat - >> .ssh/authorized_keys"

можно заменить на
ssh-copy-id [-i [identity_file]] [user@]machine

serhiy комментирует...

Добавить пользователя в группу, это
adduser юзер группа

Да. Я и сам так добавляю. В статья, на которую я ориентировался, было так, вот и попробовал.
можно заменить на
ssh-copy-id [-i [identity_file]] [user@]machine

Спасибо. Я такого еще не встречал.

virens комментирует...

Интересная статья, хотелось бы продолжения об эффективном использовании ssh.

Tigro комментирует...

Ляпну не в тему, так как почему-то про sshfs все знают, а про fuseftp для работы с ftp через fuse как-то не особо (http://wiki.thiesen.org/page/Fuseftp). А бывает нужно.

serhiy комментирует...

to virens
Так ты же сам об этом обещал?! У тебя об этом есть хорошая статья. Осталось лишь чуть развить тему ключей, добавить вспомогательные утилиты (scp...) и все.

to tigro
Почему не в тему? Все в тему. Интересно. Спасибо за ссылку. Я действительно об этом впервые слышу. Нужно посмотреть.

Unknown комментирует...

А на староне сервера надо запускать nfs?
Просто не совсем понял sshfs это шифрование к какому протоколу?

serhiy комментирует...

Нет, sshfs это не шифрование nfs. sshfs использует лишь протокол ssh и программу fuse которая позволяет создавать виртуальные файловые системы. Программа как-бы отображает содержимое директории удаленного сервера у вас на компьютере.

Unknown комментирует...

А на сервере к которому подключаюсь что должно стоять?

serhiy комментирует...

Стоять должен SSH-server.

Анонимный комментирует...

А не проще в Конкуерре (при поднятом и настроенном, естественно, сервере SSH в адресной строке набрать
fish://192.168.0.1/
(или с именем пользователя - по умолчанию берется текущий пользователь).
Идея была тоже подчерпнута мной из новостей Опеннет.ру

--------
pzp-5

serhiy комментирует...

И не обязательно с конкюрора, можно и с mc. Действительно это проще.

Furyz комментирует...

Классная статья , кстати еще есть ssh file sender если кому интересно , могу написать че с ним делать

Анонимный комментирует...

сделал как написано
sshfs user@uuser.ssh.masterhost.ru:~/ /home/zema/hosting/

При монтировании ошибок нет

ls -l /home/zema/ |grep hosting
?--------- ? ? ? ? ? /home/zema/hosting
ubuntu 7.10
2.6.22-14 generic
fuse-utils 2.7.0.
libfuse2 2.7.0

Помогите разобраться

Анонимный комментирует...

> sshfs user@uuser.ssh.masterhost.ru:~/ /home/zema/hosting/

Добавь опции:

sshfs user@uuser.ssh.masterhost.ru:~/ /home/zema/hosting/ -o allow_other,follow_symlinks

Unknown комментирует...

Система OCS Inventory NG использует программу агента, которая выполняется на инспектеруемом оборудовании и передает информацию на центральный сервер. Управление программами-агентами выполняется так же с центрального центрального сервера. Централый сервер системы позволяет не только собирать информаци об инвинтаризируемом обоурдовании, но и частично управлять инспектируемыми компьютерами.А вот мой сайт возможно вас за интересует это - очередной островок любви и нежности - buy viagra ;);)...Большое спасибо вам и я очень благадарна вам за визит на мой сайт ...удачи...С Уважением Лариса

Анонимный комментирует...

Pilots complete flights for their airline, using their
simulator, either online (using a network such as
Sim - Miles) or offline, and then file a pilot report.
If you make mistakes and you use a simulator, then it will cost you nothing.
This game by Hexacto is simple, straightforward, and fun. If you are
using your own clubs, clean it with a wet cloth at least every 2-3 days.

If you are looking for a fun way to spend your weekends, aflight simulator games is one of the most fun things
to have.