Помощник веб-разработчикаИнструментыИнструкции

SSH-ключи

SSH-ключи — это открытый и закрытый ключи для аутентификации в удалённой операционной системе по SSH, по принципу вызов-ответ. Открытый ключ хранится в удалённом компьютере, а закрытый находится в локальном и должен быть доступен только его владельцу. Аутентификация по SSH-ключам увеличивает безопасность т. к. исключает взлом полным перебором (брутфорс) и перехват пароля, а так же устраняет необходимость вводить пароль при каждом подключении.

Как работают SSH-ключи?

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

Типы SSH-ключей.

Алгоритм подписи SSH-ключа является важным фактором влияющим на безопасность, взлом ключа приведёт к получению злоумышленником контроля над удалённой машиной. Краткое описание типов SSH-ключей:

RSA
Старый алгоритм, но за счёт возможности увеличения длины ключа, самый безопасный, может иметь размер 1024-16384 бита. Сейчас безопасной длиной считается 2048 бит, эта длина используется по умолчанию при создании SSH-ключей.
Ed25519
Современный и очень быстрый алгоритм, имеет фиксированную длину ключа всего 256 бит, но его безопасность аналогична RSA с длиной ≈ 3000 бит.
DSA
Устаревший алгоритм, эти SSH-ключи имеют фиксированную длину равную 1024 бита, использовать их опасно.
ECDSA
Этот алгоритм уступает как по безопасности, так и по производительности Ed25519 ввиду чего его применение не целесообразно, кроме того, существует небезосновательное мнение, что ANSI умышленно встроило в него определённые уязвимости.

Подводя итог, можно сказать что оптимальным алгоритмом для SSH-ключа является Ed25519. Если необходима повышенная безопасность, следует сгенерировать RSA 4096, но в большинстве случаев в этом нет смысла, т. к. в обозримом будущем не предвидится возможности взлома RSA 2048 в разумный срок. Стоит отметить, что SSH-ключи используются только при аутентификации и не влияют на нагрузку при приёме или передаче данных по SSH.

Хранение закрытого ключа.

Закрытый ключ необходимо хранить в закрытом от других пользователей каталоге, в *nix системах рекомендуется хранить его в каталоге ~/.ssh, права на каталог должны быть установлены как «drwx------» (700 — права на чтение, изменение и доступ к содержимому только у владельца), а на ключ «-rw-------» (600 — права на чтение и изменение только у владельца, на запуск ни у кого). Ключ может храниться как в зашифрованном, так и в незашифрованном виде. Хотя закрытый ключ никуда не передаётся, его могут украсть из компьютера, ввиду чего хранить его рекомендуется в зашифрованным виде, т. к. если неизвестна кодовая фраза, он будет не пригоден к использованию. Если требуется повышенная безопасность, можно увеличить количество раундов формирования ключа до 50, в случае его утечки, это замедлит взлом перебором, что сделает это дело бессмысленным.

Генерация SSH-ключей.

Генерация SSH-ключей с помощью OpenSSH-client.

Настройка аутентификации по SSH-ключам.

Для подключения с помощью SSH-ключей, необходимо настроить SSH-сервер, но перед тем как приступить к настройке, необходимо сгенерировать SSH-ключи.

Настройка подключения по SSH-ключам OpenSSH-сервера.