Подробный гайд: Генерация SSH-ключей и настройка Рутокен ЭЦП 3.0 3220 Type-C
Рутокен ЭЦП 3.0 3220 Type-C отлично подходит для безопасной работы по SSH. Главное преимущество такого подхода заключается в том, что приватный ключ генерируется внутри защищенной памяти устройства и никогда не может быть извлечен. Все криптографические операции (подпись) выполняются непосредственно на самом чипе токена.
Ниже представлен подробный гайд по настройке для операционных систем семейства GNU/Linux (наиболее частый сценарий для SSH), а в конце приведены инструкции для Windows.
Шаг 1. Установка необходимого ПО (Linux)
Для работы нам понадобятся драйверы смарт-карт, утилиты OpenSC и официальная PKCS#11 библиотека от Рутокен.
1. Установите базовые пакеты (для Debian/Ubuntu/Alt Linux):
sudo apt install pcscd pcsc-tools openssh-client opensc
Примечание:
Убедитесь, что служба pcscd запущена, иначе система не увидит токен:
sudo systemctl enable --now pcscd pcscd.socket
Вы можете проверить физическое подключение токена командой pcsc_scan.
2. Установите библиотеку librtpkcs11ecp.so:
Скачайте установочный пакет для вашей архитектуры на официальном сайте Рутокен в разделе загрузки PKCS#11 - https://www.rutoken.ru/support/download/pkcs/.
Установите его через терминал:
sudo apt install ./librtpkcs11ecp_<версия>.deb
По умолчанию библиотека установится в /usr/lib/librtpkcs11ecp.so.
Шаг 2. Инициализация и настройка PIN-кода
По умолчанию на новых токенах Рутокен установлен заводской PIN-код пользователя: 12345678 (и PIN-код администратора 87654321). Настоятельно рекомендуется сменить его перед началом работы.
Сделать это можно через утилиту pkcs11-tool:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --login --change-pin
Система попросит ввести текущий PIN (12345678), а затем дважды ввести новый.
Шаг 3. Генерация ключевой пары на самом токене
В отличие от обычных ssh-keygen, команда ниже не создает файл с приватным ключом на жестком диске, а генерирует его внутри чипа Рутокена.
Сгенерируем RSA-ключ длиной 2048 бит с идентификатором 45 (ID может быть любым, например 01, 12 или 45):
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
(Опция -l означает --login — потребуется ввести ваш новый PIN-код).
Важно:
Рутокен ЭЦП 3.0 также поддерживает алгоритмы ГОСТ, но стандартный OpenSSH "из коробки" не всегда корректно работает с ГОСТ-ключами без дополнительных патчей. Для максимальной совместимости с любыми серверами (включая GitHub, GitLab и корпоративные серверы) рекомендуется использовать RSA или ECDSA.
Шаг 4. Экспорт публичного ключа
Теперь нам нужно "попросить" токен отдать нам публичную часть ключа в понятном для OpenSSH формате, чтобы скопировать её на сервер.
ssh-keygen -D /usr/lib/librtpkcs11ecp.so -I 0:45 >> key.pub
Параметр 0:45 означает <слот>:<id>. Слот обычно имеет индекс 0, а 45 — это ID ключа, который мы задали на прошлом шаге.
В файле key.pub появится строка, начинающаяся с ssh-rsa AAAA.... Это ваш публичный ключ.
Шаг 5. Настройка удаленного сервера
Скопируйте содержимое файла key.pub на сервер, к которому планируете подключаться. Его нужно добавить в файл ~/.ssh/authorized_keys того пользователя, под которым вы будете логиниться.
Это можно сделать одной командой (замените username и server_ip):
ssh-copy-id -i key.pub username@server_ip
Если ssh-copy-id не поддерживает нестандартные ключи, зайдите на сервер вручную и добавьте строку из key.pub в конец файла ~/.ssh/authorized_keys.
Не забудьте проверить права доступа на сервере: chmod 700 ~/.ssh и chmod 600 ~/.ssh/authorized_keys.
Шаг 6. Подключение по SSH
Теперь, когда сервер знает публичный ключ, можно подключаться. Есть два удобных способа.
Способ А: Прямое подключение (через параметр -I)
Передайте библиотеку Рутокена напрямую в SSH-клиент:
ssh -I /usr/lib/librtpkcs11ecp.so username@server_ip
В этот момент SSH обратится к токена, и консоль запросит ваш PIN-код. После его ввода вы окажетесь на сервере.
Способ Б: Использование SSH-агента (рекомендуется)
Чтобы не вводить PIN-код при каждом подключении или при использовании Git, можно один раз загрузить токен в ssh-agent:
1. Запустите агент:
eval $(ssh-agent -s)
2. Добавьте в него модуль Рутокена:
ssh-add -s /usr/lib/librtpkcs11ecp.so
Система один раз запросит PIN-код.
3. Теперь подключайтесь как обычно:
ssh username@server_ip
Упрощение через ~/.ssh/config
Чтобы не писать флаг -I каждый раз, отредактируйте файл ~/.ssh/config на вашей локальной машине:
Host my-server
HostName 192.168.1.10
User username
PKCS11Provider /usr/lib/librtpkcs11ecp.so
После этого достаточно будет просто писать: ssh my-server.
Краткая инструкция для Windows (OpenSSH)
Если вы используете Windows 10/11 со встроенным OpenSSH (или Git Bash):
- Установите Драйверы Рутокен для Windows с официального сайта.
- Откройте PowerShell или Командную строку.
3. Сгенерируйте ключ (путь к DLL может отличаться в зависимости от разрядности системы):
"C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-tool.exe" --module "C:\Windows\System32\rtPKCS11ECP.dll" --keypairgen --key-type rsa:2048 -l --id 45
4. Экспортируйте ключ:
ssh-keygen -D "C:\Windows\System32\rtPKCS11ECP.dll" -I 0:45 >> key.pub
5. Подключайтесь:
ssh -I "C:\Windows\System32\rtPKCS11ECP.dll" username@server_ip
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.