SSH-аутентификация при помощи USB-ключа eToken Pro
21-10-2010. Разместил: synergix Иной раз приходится обходится без своего ноута с любовно настроенными программами, и выходить в интернет с "публичных" мест. Поскольку вводить пароль от серверов на общедоступном комьютере мне как-то не хотелось, решено было использовать "железный" ключ для доступа по ключам. Статья не моя, я лишь воспользовался приведенным в дебрях интернета рецептом. Оказалось, очень удобно, так как флешка с ключами всегда со мной.

Для этого нам понадобятся:
— Собственно сам USB-ключ eToken Pro (в моем случае это eToken Pro 64k)
— Операционная система Windows с установленными драйверами eToken PKI Client
— Mozilla Firefox с установленным плагином Key Manager
— SSH-клиент с поддержкой смарт-карт. Лично мне нравится PuTTY SC — модифицированная версия PuTTY.
HINT! На второй странице описание как заставить это работать под FreeBSD.
Предполагается, что у вас уже есть инициализированный USB-ключ с установленным пин-кодом, он подключен к компьютеру и готов к работе.
Создание открытого/закрытого ключа.
1) Запускаем Firefox и открываем Key Manager (Инструменты -> Key Manager Tool Box -> Key Manager)

2) Вводим пользовательский пароль для eToken

3) В главном меню Key Manager выбираем «Generate Self-Signed Cert»

4) Заполняем поля как показано на рисунке и нажимаем «Generate Self-Signed Cert». Естественно вам необходимо ввести свои данные, такие как город, страна, и fqdn сервера. Также по желанию можно указать дополнительные свойства сертификата — срок действия и т.д.

5) Выберите нужный токен из списка и нажмите «ОК». Обратите внимание, что если вы генерируете сертификат сразу на токене то экспортировать закрытый ключ потом будет невозможно.

6) В главном меню Key Manager выделите только что созданный сертификат, и нажмите кнопку «Export»

7) В появившемся окне выберите формат «OpenSSH Pubkey» и нажмите кнопку «ОК»

В результате получим строку вроде нижеприведенной. Это и есть наш публичный ключ — сохраните его, он нам понадобится на следующем этапе.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDL9ViU3+/80xZka0G91eoDyNuPT4eb1/8ro0iZEBnRI7+B+LwJbWrvqfJxNQluMiGPhftBCao4VjCcby21g0q+1sp42MR1bPD8BgA42ZDuum/sq5gFEM16n+g8+bXxtoZ/kF2bPJ4fGsowmdQCc8I7xECcYazz2AG8oZqU9l0anw==
Настройка аутентификации по ключу на сервере.
В качестве сервера в моем случае выступает машина с установленным Debian Lenny.
Вам необходимо убедиться что в конфигурации sshd разрешена аутентификация при помощи публичных ключей. Для этого необходимо в файле «sshd_config» указать значение параметра «PubkeyAuthentication» в «yes».
Затем в файл "~/.ssh/authorized_keys" добавляем наш публичный ключ полученный ранее (одной строкой). Обратите внимание, файл ".ssh/authorized_keys" находится в домашнем каталоге того пользователя, который потом будет логиниться по публичному ключу.
Настройка SSH-клиента PuTTY SC на использование смарт-карт.
PuTTY SC — это модифицированная версия PuTTY. Единственное значительное отличие от оригинальной версии — поддержка смарт-карт.
Настройка в данном случае почти ничем не отличается от обычных соединений — нужно указать адрес сервера, тип подключения, тип клавиатуры, кодировку.
Для использования аутентификации при помощи смарт-карты зайдите в раздел «Connection -> SSH -> Pkcs11», отметьте галочку «Attempt PKCS#11 smartcard auth (SSH-2)», укажите путь к библиотеке eToken — «C:\Windows\System32\eToken.dll», выберите в списке название токена и закрытый ключ, который мы создали ранее.

При подключении вас попросят ввести пользовательский пин-код к USB-ключу.

Поздравляю, теперь вы можете использовать SSH-аутентификацию при помощи eToken Pro!
Примечание: несомненно, генерировать ключи можно различными способами, используя различное ПО и различные операционные системы. Связка Windows+Firefox была выбрана как наиболее простая и понятная.
Еще примечание: по вкусу можно отключить на сервере другие методы аутентификации, оставив только аутентификацию по ключу. Данная статья позволяет использовать оба метода аутенфикации, но если вы хотите оставить доступ только по ключу - нужно внести немного правок в конфиг sshd.conf
Перво-наперво, проверьте и отключите доступ root:
PermitRootLogin no
Затем отредактируйте следующие строки:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
UsePAM no
Для того чтобы эта связка работала на FreeBSD нужно сделать следующее:
1. Установить порты security/openct, security/opensc и security/openssh-portable.
2. В конфиге OpenSSH опции OPENSC и OPENSCPINPATCH должны быть включены либо прописать их в /etc/make.conf
WITH_OPENSC=yes
WITH_OPENSCPINPATCH=yes
Первая опция включает поддержку OpenSC в OpenSSH, вторая - задействует патч для OpenSSH, суть которого в запросе у вас PIN-кода.
Поддержка DSO в OpenSSL появилась в FreeBSD-7 и FreeBSD-6 после августа 2006 года, более старые версии необходимо пропатчить.
3. Загрузить движок pksc11 командой
engine dynamic -pre SO_PATH:/usr/local/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/local/lib/opensc-pkcs11.so
4. Для определения ключа добавить в /etc/devd.conf
# eToken
attach 100 {
device-name "ugen[0-9]+";
match "vendor" "0x0529";
match "product" "0x0514";
action "/usr/local/etc/rc.d/openct restart";
};
detach 100 {
device-name "ugen[0-9]+";
match "vendor" "0x0529";
match "product" "0x0514";
action "/usr/local/etc/rc.d/openct restart";
};
5. Пользоваться. :fellow:
Вернуться назад