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

Будем считать, что на вашем сервере уже установлен кошелек 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.
Поводите курсором мышки по экрану во время генерации ключа. На выходе вы должны получить примерно следующее:
Нажимаем Save Private Key и сохраняем ключ себе на компьютер. Защитный пароль нам не нужен, поэтому соглашаемся на сохранение без пароля.
Далее нам нужно отправить публичный ключ в блокчейн EmerCoin (выделен на картинке выше). Для этого в кошельке EmerCoin на своем пк в поле name укажите:
ssh:ваш_логин
В поле value вставьте свой публичный ключ, полученный в PuTTYgen. Поле new address можно оставить пустым. Укажите количество дней, и нажмите Submit.
Теперь нужно дождаться подтверждения нашей транзакции. Чтобы не тратить время попусту, вернемся на наш сервер и добавим нового пользователя в файл 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:
Нажмите Browse... и укажите путь к вашему приватному ключу.
Во вкладке Connection -> Data можно указать пользователя, под которым мы хотим зайти на сервер. Если не указали, ничего страшного, при подключении сервер сам запросит имя пользователя.
Нажимаем 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:
Теперь нам требуется перенести ключ в OSX и добавить его в систему. Откройте терминал и перейдите в папку с ключом. У меня это папка Keys:
cd Keys
Установите права только на чтение, иначе система будет ругаться:
chmod 0400 ваш_файл_ключей
Добавляем ключ:
ssh-add ваш_файл_ключей
В ответ мы получим сообщение, что идентификатор добавлен. Проверить подключение можно командой:
ssh root@IP_сервера
Если сервер не запросил пароль, значит все хорошо. На этом все. Если возникнут вопросы, обязательно задавайте их в комментариях.
Комментарии:
admin
#
Дополнение от одного из разработчиков EmerCoin Олега Ховайко:
Красота этой идеи - как раз в том, что сервера могут быть и не собственные - то есть система совсем-совсем распределённая.
Например, Вы служба поддержки, и поддерживаете проекты в 300 компаниях. И время от времени надо логиниться на серверы клиентов и что-то там делать. Можно конечно везде ключи разложить статически, и всё. Но скажем, в случае подозрения на компрометацию ключа Вам надо лихорадочно обходить все сервера клиентов, и быстро менять ключи.
Или другой вариант - ваш админ уволился. Или уволен. Короче - надо быстро отозвать его ключ, или хотя бы исключить из группы админов.
Вот emcssh показывает всю свою мощь именно на таких примерах.
ср, 06/17/2015 - 22:21
Анонимус
#
А есть разница что делать первым - регистрировать группу или добавлять сертификаты от пользователей группы?
пт, 06/19/2015 - 22:05
Oleg Khovayko
#
Разницы нет, записи в NVS независимы, и их взаимная зависимость на сервере создаётся на этапе логина.
Но наверное, лучше сначала вводить пользователей, а потом из них создавать группы.
пн, 06/22/2015 - 21:50
admin
#
Вообще не получится зарегистрировать группу, если пользователи не созданы. Поэтому сначала добавьте пользователей с публичными ключами, потом добавляйте группу.
чт, 06/25/2015 - 18:28
Иван
#
Обычная авторизация по ключу будет работать? Т.е. если я отключу доступ по паролю и емеркоин потом упадет я смогу попасть на сервер?
чт, 06/25/2015 - 18:26
EDC825A8846D2053
#
Мы проверяли на 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
admin
#
Если ставите emcSSH на raspberry pi с Debian, то для обновления OpenSSH нужно сделать следующее:
Добавляем в конец файла:
Далее:
чт, 07/02/2015 - 13:33
Emer
#
Спасибо за мануал - получилось с первого раза! Учитывая, что я далеко не опытный unix админ, мануал отличный.
вт, 12/08/2015 - 22:05
Andrey
#
А если еще кто-то добавит такое-же имя, как у меня? Он тоже сможет попасть на сервер со своей парой ключей?
вт, 04/19/2016 - 11:10
admin
#
Такое же имя добавить в блокчейн не получится
вт, 04/19/2016 - 11:22
Andrey
#
Ага, т.е. все админы, которые захотят использовать данный способ авторизации должны будут использовать уникальные имена, верно?
вт, 04/19/2016 - 12:44
maxihatop
#
Верно. Ведь это всемирная PKI-система.
пн, 05/23/2016 - 19:37