Авторизация на сервере по ключам

В материале про безопасность серверов хостинга я упоминал авторизацию на сервере по ключам и сегодня хочу остановиться на этом подробнее.

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

Перейдём непосредственно к настройке. Весь процесс состоит из трёх этапов — генерация пары ключей, настройка авторизации на клиенте и сервере, отключение на сервере авторизации по паролю.

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

Для генерации пароля на компьютере я использую PuTTYgen от разработчика PuTTY. Скачать PuTTYgen можно на официальной страничке, там же можно скачать PuTTY, если её у вас ещё нет.
Скачиваем PuTTYgen для генерации ключей

При запуске puttygen.exe нам показывается следующее окно, где для генерации пары ключей необходимо только нажать кнопку Generate.
Первый запуск PuTTYGen

Для генерации ключа нас просят перемещать мышку в случайном порядке на пустой области — так и сделаем.
Процесс генерации ключа в PyTTYgen

После генерации ключа открывается диалог сохранения. В верхнем окне располагается публичный ключ (который нам будет нужно скопировать на сервер) и предлагается задать комментарий (Key comment) и пароль (Key passphrase) для приватного ключа (он будет храниться на вашем компьютере). В качестве комментария ключа на своих серверах я использую имя сервера, на клиентских — ник клиента.
Пара ключей сгенерирована. Сохраняем приватный ключ

Ставить пароль на ключи или не ставить — дело каждого, я ставлю небольшой пароль удобный для запоминания и ввода. Можно так же ставить серьёзные, сложные пароли и использовать Pageant, чтобы не вводить их при каждой авторизации. Можно вообще не указывать пароль.
После указания комментария и пароля нажимаем Save private key и сохраняем приватный ключ с удобным именем в любую папку.

Настройка авторизации на клиенте и сервере

После того как ключи сгенерированы и сохранены — нужно настроить ssh-клиент и сервер для их использования. Начнём с сервера т.к. это немного сложнее.

Заходим в домашнюю директорию root пользователя через WinSCP (он же у нас настроен?) и создаём в ней папку .ssh с правами 700 (просмотр и создание файлов только владельцем).
Для этого в нужной папке нажимаем F7 и заполняем диалоговое окно, как показано на скриншоте ниже
Создание папки .ssh

Далее нам нужно зайти в созданную папку и создать в ней файл с публичным ключём.
Для этого нажимаем Shift + F4, вводим authorized_keys (без расширения!) в качестве имени файла, нажимаем OK.
В открывшийся блокнот копируем содержимое окна «Public key for pasting ..» из PuTTYgen (без изменений!). Сохраняем данный файл и задаём ему права права — 600 (только чтение).

На этом настройка использования ключей со стороны сервера закончена, переходим к настройке клиента.
В моём случае это PuTTY, но аналогично настраивается в WinSCP и других клиентах для работы по ssh-протоколу.
Для использования ключа нам необходимо изменить всего одну настройку, а именно указать путь до файла с приватным ключом
putty-key

Указываем путь до своего приватного ключа, сохраняем профиль и пробуем авторизироваться на сервере
Авторизация идёт с использованием ключа

Как видите авторизация идёт по ключу и нас просят указать пароль для ключа (не путать с паролем для root пользователя на сервере).

Отключение авторизации по паролю на сервере

Мы успешно авторизировались на сервере по ключу и теперь самое время отключить авторизацию по паролю.
Для этого открываем файл /etc/ssh/sshd_config и изменяем в нём опцию PasswordAuthentication


# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no

Comments

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *