Главная Файлы Форум Галерея Гостевая книга Обратная связь Карта сайта Поиск
 

 

Моё место работы

СитиСервис
  • Заправка и ремонт лазерных картриджей
  • Ремонт любых принтеров и копиров
  • Оригинальные и совместимые картриджи
  • Доставка бесплатно (от 2-х картриджей)
  • Накопительная система расчётов для корпоративных клиентов
Телефон
+7 (4722) 373-983
8-980-326-01-23
Адрес E-mail
mybelpost@gmail.com

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Разделы -> Статьи -> Linux - разное -> Настройка SSHFS с ав...

Настройка SSHFS с авторизацией по ключу и автомонтирование

То, что здесь будет описано новостью не является для знающих, что такое SSH и публичный/приватный ключ.
   Здесь я расскажу ещё раз о процедуре настройки sshfs, т.к. в моей школе по этому принципу обеспечена связь между членами одной локальной сети. Плюс связь между двумя локальными сетями через Интернет (у нас в школе два корпуса не имеющих прямой связи друг с другом - только через Интернет). Можно было бы организовать и тунель средствами iptables, но я сделал через sshfs и это работает.

Топология сети, в которой будут производиться настройки SSHFS

Рисунок приблизительной топологии сети школы

В общем, понадобилось сделать общий каталог для двух сетей сидящих за NAT.

Исходный материалл:

xDSL-модемы работающие в режиме моста;
два сервера с работающими Squid и Dansguardian под ALT-Linux-5 Server;
две локальные сети подключенные через свитч, каждая к своему серверу (см. схему).

Тка же на серверах работает ssh-сервер и клиент.


Было решено на одном из серверов организовать каталог общего доступа с доступом по SSH второй версии с авторизацией по RSA ключу - что даст шифрованный канал и при монтировании не придётся вводить логин и пароль.

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

И так, начнём с серверов.

По схеме сервер "А" ведомый, сервер "В" ведущий, т.е. общий каталог физически находится на сервере "В".
На всех машинах-участниках локальной сети и серверах должен быть установлен OpenSSH.

Логинимся на сервер "В" с правами root и устанавливаем пакеты:

# apt-get install openssh-server openssh-client

Включаем openssh-сервер в автостарт системы

# chkconfig sshd on

На серверах для монтирования FS с правами непривелигированного пользователя ставим пакет fuse-sshfs.

# apt-get install fuse-sshfs

На сервере "В" создаём пользователя net2 - каталог из его пространства будет монтировать сервер "А".

# adduser net2

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

В домашнем каталоге нового пользователя создаём каталог, который будет доступен по ssh. Назовоём его net1

# mkdir /home/net2/net1

Устанавливаем нужные права на этот каталог:

# chown net2:net2 /home/net2/net1
# chmod 777 /home/net2/net1

Теперь настроим доступ по SSH к текущему серверу.

В файле /etc/openssh/sshd_config нужно найти строку AllowUsers и привести её к виду:

AllowUsers net1 net2

где net1 и net2 - пользователи, которым дано право на подключение по ssh к данному серверу.

Перезапускаем сервис sshd

# service sshd reload

Покидаем root и логинимся под пользователем net2.

Создаём в каталоге /home/net2/net1 тестовый файл, чтобы было на что посмотреть, когда смонтируем каталог по ssh.

$ touch /home/net2/net1/test_file

С сервером "В" покончено, завершаем работу пользователя.

$ exit

Переходим к настройкам сервера "А".

Логинимся на сервер "А" с правами root и устанавливаем пакеты:

# apt-get install openssh-server openssh-client

Включаем openssh-сервер в автостарт системы

# chkconfig sshd on

На серверах для монтирования FS с правами непривелигированного пользователя ставим пакет fuse-sshfs.

# apt-get install fuse-sshfs

создаём пользователя net1 - именно он будет заниматья монтированием каталога по ssh и раздаей его по локалке.

# adduser net1

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

Добавляем пользователя в группу fuse, иначе у него не будет прав на монтирование по ssh.

# usermod -a -G fuse net1

В домашнем каталоге нового пользователя создаём каталог, в который будет смонтирован каталог сервера "В" и он же будет доступен по ssh внутри своей сети. Назовоём его net2

# mkdir /home/net1/net2

Устанавливаем нужные права на этот каталог:

# chown net2:net2 /home/net1/net2
# chmod 777 /home/net1/net2

Теперь настроим доступ по SSH к текущему серверу.

В файле /etc/openssh/sshd_config нужно найти строку AllowUsers и привести её к виду:

AllowUsers net1

где net1 - пользователь, которому дано право на подключение по ssh к данному серверу.

Перезапускаем сервис sshd

# service sshd reload

Делаем некоторые настройки у пользователя net1
Создаём файл конфигурации

# touch /home/net1/.ssh/config

Вписываем в него вот это:

echo "Host    server-b" > /home/net1/.ssh/config
echo "        HostName ххх.ххх.ххх.ххх" >> /home/net1/.ssh/config

Где ххх.ххх.ххх.ххх - IP-адрес сервера "В".
Данная строка даст возможность при монтировании вводить вместо IP имя (в  скрипте автостарта мы будем использовать именно имя).

Не ошибитесь со знаками > и >>! В первой строке именно один знак "больше", во второй два без пробела.

Автомонтирование по ssh

Теперь необходимо сделать так, чтобы каталог с сервера "В" монтировался автоматически при старте сервера "А".
Файл /etc/fstab использовать не будем, т.к. попытка монтирования в этом случае будет произведена ещё до старта сетевых интерфейсов.

Мы будем использовать стартовые скрипты, которые находятся в /etc/rc.d/init.d/ (верно для ALT-Linux, в Debian /etc/init.d/)
Для этого и создадим специальный bash-скрипт.

# touch /etc/rc.d/init.d/mountsshfs

Даём права на выполнение

# chmod 755 /etc/rc.d/init.d/mountsshfs

Открываем на редактирование созданный файл:

# mcedit /etc/rc.d/init.d/mountsshfs

Вписываем в него нижеприведённый текст:

#!/bin/sh
# mountsshfs    Mount network filesystems.
# chkconfig: 356 95 02
# description: Mount/umount sshfs


# Source function library.



if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi

start() {
echo -n "Монтиование FS с сервера В: "
su net1 -c "sshfs net2@server-b:/home/net2/net1 /home/net1/net2 -C -o sshfs_sync"
}

stop() {
echo -n "Отмонтирование FS с сервера В: "
fusermount -u /home/net1/net2
echo
}

restart() {
echo -n "Перемонтирование FS с сервера В: "
fusermount -u /home/net1/net2
su net1 -c "sshfs net2@server-b:/home/net2/net1 /home/net1/net2 -C -o sshfs_sync"
echo
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?

Сохраняем изменения.

Скрипт должен именно так и называться "mountsshfs", иначе в автостарт он включен не будет. Если дать другое произвольное имя, то необходимо во второй строке самого скрипта внести соответствующие изменения - удалить старое имя и вписать новое.

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

# chkconfig mountsshfs on

Чтобы при монтировании не запрашивался пароль мы будем использовать авторизацию по ключу.

Авторизация по ключу

Покидаем режим root и логинимся с правами обычного пользователя net1.

Заходим в каталог /home/net1/.ssh

cd /home/net1/.ssh

Если такого каталога нет, то его необходимо создать:

mkdir /home/net1/.ssh

Генерируем пару ключей RSA находясь в /home/net1/.ssh

ssh-keygen -t rsa

копируем открытый ключ на сервер "В" в учётную запись пользоватея net2

ssh-copy-id -i id_rsa.pub net2@server-b

После этого открытый ключ допишется в файл /home/net2/.ssh/authorized_keys пользоватея net2 сервера "В"

Если все операции прошли нормально, то можно получить права root и презагрузить сервер, чтобы проверить автомонтирование.

После загрузки логинимся под пользователем net1 и проверяем наличие тестового файла в каталоге net2

$ ls /home/net1/net2

Если монтирование прошло без проблем, то мы должны увитеть наш тестовый файл "test_file".

Настройка клиентских ПК

Аналогична для обеих сетей.
Примеры приведены относительно сети сервера "А".
На пользовательских ПК установлена ОС Linux с графической средой GNOME.

Начнём с генерации пары ключей для коннекта без ввода пароля.

Логинимся под тем пользователем, который будет иметь право пользоваться общим каталогом.
Вход обычный - в графическом режиме.
Открываем терминал и заходим в каталог ~/.ssh

cd ~/.ssh

Если такого каталога нет, то создаём его:

$ mkdir ~/.ssh

Генерируем ключевую пару:

ssh-keygen -t rsa

Отправляем открытый ключ на сервер:

ssh-copy-id -i id_rsa.pub net1@IP-адрес_сервера

для сервера "В" имя пользователя net2.

Теперь запускаем Nautilus.

$ nautilus ssh://net1@IP-адрес_сервера/home/net1/net2

В появившемся окне файлового менеджера жмём кнопку "Закладки" и выбираем пункт "Добавить закладку".
Сохраняем закладку и Nfutilus закрываем.
После такой процедуры в главном меню GNOME, по пути "Переход" / "Закладки" появится пункт "net2".
Жмём его и видим тестовый файл "test_file".

Все пользователи, которые будут подключены к обоим серверам по данной схеме смогут создавать/удалять каталоги и файлы без ограничения по правам, т.к. все логинятся под одним и тем же зарегистрированным на своём сервере пользователем.

PS:
Пакеты для работы с sshfs для Debian-6 Squeeze называются ssh sshfs и fuse-utils

Установка из репозитория:

# apt-get install ssh sshfs fuse-utils

Старт/стоповый скрипт должен находиться в /etc/init.d
Вот его содержимое:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          mountsshfs
# Required-Start:    $remote_sshfs
# Required-Stop:     $remote_sshfs
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Filesystem in userspace
# Description:       This file mount sshfs-folder
### END INIT INFO

# Author: Sakryukin K.V. <whitepost@mail.ru>

if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi

start() {
echo -n "Монтиование FS с сервера второго корпуса: "
su skv -c "sshfs net2@server-b:/home/net2/net1 /home/net1/net2 -C -o sshfs_sync"
}

stop() {
echo -n "Отмонтирование FS с сервера второго корпуса: "
fusermount -u /home/net1/net2
echo
}

restart() {
echo -n "Перемонтирование FS с сервера второго корпуса: "
fusermount -u /home/net1/net2
su skv -c "sshfs net2@server-b:/home/net2/net1 /home/net1/net2 -C -o sshfs_sync"
echo
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?

После копирования скрипта в /etc/init.d ему нужно дать права на выполнение и включить в автостарт:

# chmod 755 /etc/init.d/mountsshfs

# insserv mountsshfs

Выключение скрипта из автостарта:

insserv -r mountsshfs




Опубликовано: foxadmin, Автор/источник: - 26 Январь 2012 16:44:08

Комментировать

Вы не залогинены! Регистрация

Афоризмы, мысли

"Каков поп - таков приход!"

/Народная мудрость/

Счётчик

Сейчас на сайте - 1 (0 зарег.)
Всего хитов1114 
Сегодня хитов1114 
Сегодня хостов290 

Откуда гости наши?

 
Powered by ReloadCMS 1.5.0.
© 2004-2012 ReloadCMS Team
RSS AggregationPHP powered
Генерация страницы: 0.24
  Яндекс.Метрика
    Сакрюкин К.В.   Яндекс цитирования    
 
Здесь всё можно копировать и цитировать, но рабочая ссылка на мой сайт обязательна!