Вы здесь

Собственная инфраструктура открытых ключей на базе EmerCoin emcSSH

Используя некоторые возможности EmerCoin, можно создать мост между OpenSSH и блокчейном этой криптовалюты. В результате мы получим удобный, безопасный и очень гибкий способ авторизации на множестве серверов. Подробнее о преимуществах emcSSH можно узнать в блоге разработчиков. Ниже приведена инструкция по установке и настройке EmerCoin SSH на примере VPS на Debian 7.

Собственная инфраструктура открытых ключей на базе EmerCoin emcSSH

Будем считать, что на вашем сервере уже установлен кошелек EmerCoin. Если нет, вот инструкция по его установке.

Установка необходимых пакетов

Первое, что нужно сделать - установить необходимые для работы emcssh библиотеки. На всякий случай, сначала обновим имеющийся софт:

apt-get update
apt-get dist-upgrade

Теперь установим curl и jansson:

apt-get install libcurl4-openssl-dev libjansson-dev

Далее необходимо скачать и установить emcssh:

wget http://emercoin.com/content/emcssh/emcssh-0.0.2.tar.gz
tar xfz emcssh-0.0.2.tar.gz
cd emcssh-0.0.2
make
make install

Настройка emcSSH

Теперь нужно отредактировать файл конфига /usr/local/etc/emcssh_config и изменить данные emcurl на свои. Настройки нужно взять из emercoin.conf, который у нас лежит в /home/emc/.emercoin/emercoin.conf

nano /usr/local/etc/emcssh_config

Меняем значение emcurl

emcurl http://emccoinrpc:[email protected]:8775/

emccoinrpc и rpcpassword берем из emercoin.conf, остальные параметры можно оставить как есть.

Важно: emcssh_config имеет права на чтение и запись только из под рута, не меняйте права на этот файл, чтобы не скомпрометировать пароль rpcpassword.

Далее необходимо отредактировать файл конфига sshd, но в системе Debian есть небольшая проблема. Версия sshd может оказаться слишком старой и ее необходимо обновить. Пользователи других ОС могут пропустить следующий шаг.

Обновление OpenSSH на Debian

Для начала узнаем текущую версию:

sshd -v

В ответ получим такое сообщение:

unknown option -- v
OpenSSH_6.1p1 Debian

Если версия 6.2 и выше, следующий шаг можно пропустить. Если нет, обновляемся:

nano /etc/apt/sources.list

Добавляем в конец строку и сохраняем файл:

deb http://ftp.debian.org/debian/ wheezy-backports main non-free contrib

Обновляем систему:

apt-get update

и ставим sshd:

apt-get -t wheezy-backports install openssh-server

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

Кроме того, пользователям Debian из-за особенностей работы OpenSSH потребуется изменить местоположение файла emcssh:

mv /usr/local/sbin/emcssh /usr/sbin/emcssh

Настройка OpenSSH

Переходим к следующему шагу, теперь нам нужно отредактировать файл настроек sshd_config:

nano /etc/ssh/sshd_config

В него нужно добавить строки:

Для Debian:

AuthorizedKeysCommand /usr/sbin/emcssh
AuthorizedKeysCommandUser root

Для других ОС:

AuthorizedKeysCommand /usr/local/sbin/emcssh
AuthorizedKeysCommandUser root

Перезапустим sshd с новой конфигурацией:

kill -HUP `cat /var/run/sshd.pid`

Генерация пары ключей

Теперь нам нужно придумать имя пользователя и сгенерировать для него пару ключей. Если вы работает в ОС Windows, рекомендую использовать для этих целей PuTTYgen. Скачать программу можно отсюда.

Запускаем PuTTYgen, меняем число бит на 4096 и нажимаем Generate.

PuTTYgen

Поводите курсором мышки по экрану во время генерации ключа. На выходе вы должны получить примерно следующее:

PuTTYgen

Нажимаем Save Private Key и сохраняем ключ себе на компьютер. Защитный пароль нам не нужен, поэтому соглашаемся на сохранение без пароля.

Далее нам нужно отправить публичный ключ в блокчейн EmerCoin (выделен на картинке выше). Для этого в кошельке EmerCoin на своем пк в поле name укажите:

ssh:ваш_логин

В поле value вставьте свой публичный ключ, полученный в PuTTYgen. Поле new address можно оставить пустым. Укажите количество дней, и нажмите Submit.

Emercoin Wallet

Теперь нужно дождаться подтверждения нашей транзакции. Чтобы не тратить время попусту, вернемся на наш сервер и добавим нового пользователя в файл emcssh_keys:

cd $HOME/.ssh/
nano emcssh_keys

В документ просто добавьте своего пользователя через @. В моем случае это:

@kamillo

Сохраните crtl+x и закройте документ.

Следует заметить, что технология EmerCoin позволяет работать не только с отдельными пользователями, но и целыми группами. Допустим, у меня есть 3 друга, которым я хочу дать доступ к своим серверам. Можно просто перечислить всех в файле emcssh_keys, но это неудобно, т.к. каждый раз при удалении или добавлении пользователя нужно будет править этот файл на всех серверах. Есть более универсальный и простой способ. Достаточно зарегистрировать в блокчейне группу, например @kamilloFriends и перечислить всех друзей. Значения полей будут выглядеть следующим образом:

Name: ssh:kamilloFriends
Value: @kamillo|@friend1|@friend2|@friend3

Если понадобится добавить или удалить друга, достаточно будет сделать транзакцию Name_Update в своем кошельке.
Таким образом, если в файле emcssh_keys я укажу группу @kamilloFriends, система сможет авторизовать любого из моих друзей, при условии что он как и я сгенерировал пару ключей и отправил их в блокчейн.

Проверка работоспособности

Вернемся к нашим настройкам. Чтобы удостовериться, что все работает как надо, запустите команду:

emcssh username

Т.к. сервер тестовый, я работаю от пользователя root, в этом случае команда будет:

emcssh root

В ответ мы получим следующее сообщение:

#INFO: verbose=2; maxkeys=4096 recursion=30 emcssh_keys=/root/.ssh/emcssh_keys; [email protected]:8775/

#Path=/
#Path=/kamillo/
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAgEAgmzL............

Прекрасно. Все работает. Теперь попробуем авторизоваться. Не закрывая текущую сессию, авторизуемся в новой вкладке без пароля. Для этого нужно открыть новое окно PuTTY, ввести IP адрес вашего сервера и в левом меню перейти в SSH->Auth:

PuTTY

Нажмите Browse... и укажите путь к вашему приватному ключу.

Во вкладке Connection -> Data можно указать пользователя, под которым мы хотим зайти на сервер. Если не указали, ничего страшного, при подключении сервер сам запросит имя пользователя.

PuTTY

Нажимаем Open и подключаемся к серверу. Если подключиться по каким-то причинам не удалось, откройте окно с предыдущей сессией и введите команду:

cat /var/log/auth.log

Там будут сообщения об ошибках, поищите решение в сети, и если не получится починить - задавайте вопросы в комментариях ниже. Будем надеяться, что у вас, как и у меня, все получится.

Напоследок, вот вам еще одна полезная команда, которая показывает откуда заходили по ключу:

grep "Accepted publickey" /var/log/auth.log

Дополнение: Авторизация по ключу в MacOS X

Для того, чтобы иметь возможности авторизоваться на сервере по ключу через терминал OS X, необходимо сначала сконвертировать приватный ключ в нужный формат. Я делал конвертацию в ОС Windows через программу PuTTYgen. Так как система OS X будет ругаться на отсутствие защиты ключа, лучше сразу установить пароль на ключ (в дальнейшем этот пароль нужно будет ввести только один раз).

Итак, запускаем PuTTYgen, жмем Load и выбираем наш ключ *.ppk. Далее задаем пароль на использование ключа в поле Key passphrase и Confirm passphrase. Переходим на вкладку Conversions и экспортируем ключ в формате OpenSSH:

PuTTYgen

Теперь нам требуется перенести ключ в OSX и добавить его в систему. Откройте терминал и перейдите в папку с ключом. У меня это папка Keys:

cd Keys

Установите права только на чтение, иначе система будет ругаться:

chmod 0400 ваш_файл_ключей

Добавляем ключ:

ssh-add ваш_файл_ключей

В ответ мы получим сообщение, что идентификатор добавлен. Проверить подключение можно командой:

ssh root@IP_сервера

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

Категория: 
Tutorial
4
Ваша оценка: Нет Средняя: 3.7 (3 оценок)
74692 / 1
Аватар пользователя admin
Публикацию добавил: admin
Дата публикации: вт, 06/16/2015 - 11:11

Что еще почитать:

Комментарии:

Дополнение от одного из разработчиков EmerCoin Олега Ховайко:

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

Например, Вы служба поддержки, и поддерживаете проекты в 300 компаниях. И время от времени надо логиниться на серверы клиентов и что-то там делать. Можно конечно везде ключи разложить статически, и всё. Но скажем, в случае подозрения на компрометацию ключа Вам надо лихорадочно обходить все сервера клиентов, и быстро менять ключи.

Или другой вариант - ваш админ уволился. Или уволен. Короче - надо быстро отозвать его ключ, или хотя бы исключить из группы админов.
Вот emcssh показывает всю свою мощь именно на таких примерах.

ср, 06/17/2015 - 22:21

Анонимус

А есть разница что делать первым - регистрировать группу или добавлять сертификаты от пользователей группы?

пт, 06/19/2015 - 22:05

Oleg Khovayko

Разницы нет, записи в NVS независимы, и их взаимная зависимость на сервере создаётся на этапе логина.
Но наверное, лучше сначала вводить пользователей, а потом из них создавать группы.

пн, 06/22/2015 - 21:50

Вообще не получится зарегистрировать группу, если пользователи не созданы. Поэтому сначала добавьте пользователей с публичными ключами, потом добавляйте группу.

чт, 06/25/2015 - 18:28

Иван

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

чт, 06/25/2015 - 18:26

Мы проверяли на Ununtu - работает. Выхлоп emcssh просто конкатенируется с ключами из .ssh/authorized_keys.
Но возможно, в конфигах sshd на вашей OC стоят другие опции. Короче - лучше проверить.

чт, 09/10/2015 - 11:15

Oleg Khovayko

> Т.е. если я отключу доступ по паролю и емеркоин потом упадет я смогу попасть на сервер?

Мы проверяли на Ununtu - работает. Выхлоп emcssh просто конкатенируется с ключами из .ssh/authorized_keys.
Но возможно, в конфигах sshd на вашей OC стоят другие опции. Короче - лучше проверить.

пт, 06/26/2015 - 18:42

Если ставите emcSSH на raspberry pi с Debian, то для обновления OpenSSH нужно сделать следующее:

nano /etc/apt/sources.list

Добавляем в конец файла:

deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
deb http://archive.raspbian.org/raspbian jessie main contrib non-free rpi

Далее:

apt-get update
apt-get -t jessie install openssh-server

чт, 07/02/2015 - 13:33

Emer

Спасибо за мануал - получилось с первого раза! Учитывая, что я далеко не опытный unix админ, мануал отличный.

вт, 12/08/2015 - 22:05

Andrey

А если еще кто-то добавит такое-же имя, как у меня? Он тоже сможет попасть на сервер со своей парой ключей?

вт, 04/19/2016 - 11:10

Такое же имя добавить в блокчейн не получится

вт, 04/19/2016 - 11:22

Andrey

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

вт, 04/19/2016 - 12:44

maxihatop

Верно. Ведь это всемирная PKI-система.

пн, 05/23/2016 - 19:37