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

Дмитрий Корнев
25 февраля 2021

Использование SSH-ключа для авторизации безопаснее и удобнее, по сравнению с паролем. У нормальных хостингов для вновь созданных серверов доступ по паролю просто отключен.

Генерация

Достаточно выполнить всего одну команду:

ssh-keygen -t rsa

Сначала будет предложено указать каталог и название для генерируемых файлов. Можно оставить по умолчанию, просто нажать «Enter». Далее можно будет задать пароль для дополнительной защиты. Это имеет смысл делать если есть вероятность, что кто-то может получить доступ к сгенерированным файлам.

Пример всего процесса:

d1mon@d1monNB:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/d1mon/.ssh/id_rsa): 
Created directory '/home/d1mon/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/d1mon/.ssh/id_rsa
Your public key has been saved in /home/d1mon/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:X5sRkDPzEOwmFEoWh8ZEDFLXi4zYUH5pKiWe8EBWkfo d1mon@d1monNB
The key's randomart image is:
+---[RSA 3072]----+
| oo=**B+oooo     |
|o .+ +=+o B.     |
|o o+o+=o o *.    |
| *.+o+o o o ..   |
|  * .   So  o    |
|   E     . . +   |
|          . o    |
|                 |
|                 |
+----[SHA256]-----+

В результате у нас появилось два файла:

Бывает, что открытый ключ заносится в панель управления на хостинге, и уже оттуда используется при создании новых серверов. Или при переустановке старых. Иногда ключ можно добавить и уже для существующих серверов, без переустановки. Всё зависит от того, как это реализовано на хостинге.

Можно и вручную добавить открытый ключ на сервер. Он должен быть в файле /home/пользователь/.ssh/authorized_keys. В этом файле может быть несколько ключей. Добавьте свой ключ на новую строчку. Если файла нет, то создайте его. Таким образом мы получаем возможность подключения с помощью ключа к серверу под тем пользователем, в каталог которого мы поместили ключ. Можно добавить ключ сразу нескольким пользователям, если вам это нужно. Убедитесь, что права на чтения данного каталога и файла имеет лишь соответствующий пользователь.

Рекомендации

Лучше добавить ключ в каталог обычного пользователя. Не добавляйте его для root. Технически — это возможно, но в целях ещё одной степени защиты правильнее подключаться к серверу под обычным пользователем. Для него можно настроить sudo, если ещё не настроено. Таким образом, когда нужно будет вы сможете без проблем поработать с правами администратора.

Не используйте одни и те же ключи на всех своих компьютерах. Генерируйте на каждом компьютере ключи отдельно. Тем более не давайте свои ключи никому. Как уже было отмечено — нет никаких проблем добавить на одном и том же сервере ключи сразу от нескольких компьютеров.

Проверьте, что вход по SSH-ключу работает, после этого отключите аутентификации по паролю. В файле /etc/ssh/sshd_config установите параметры:

# Отключение входа по паролю
PasswordAuthentication no
ChallengeResponseAuthentication no

# Отключение входа для root
PermitRootLogin no

Перезапуск службы:

service sshd restart

Активация ключа

Иногда ключ требуется добавить вручную:

eval "$(ssh-agent -s)"
ssh-add /path/to/private_key

А так можно удалить все подключенные вручную ключи:

eval "$(ssh-agent -s)"
ssh-add -D

Добавление/удаление происходит для активного пользователя, под которым выполняются команды.

PS

Надо сказать, что доступ по SSH-ключу — это не только для серверов на хостинге или ещё где-то. Просто это наиболее часто встречающееся применение. На самом деле, мы имеем дело просто с линуксом. Можно всё то же самое делать и в отношении обычных компьютеров. У меня к рабочему десктопу настроен SSH-доступ и тоже используется SSH-ключ.

Комментарии