Генерация SSH ключей и их использование

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

Как это работает?
Вкратце: Для проверки ключа сервер отправляет клиенту произвольное сообщение. Клиент шифрует это сообщение своим приватным ключом и возвращает результат серверу. Сервер расшифровывает сообщение с помощью открытого ключа. И если в результате получается исходное сообщение, то значит ключи подходят и клиента можно авторизовать. Более подробно можно почитать на специализированных сайтах.

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

Для генерации ключей в Windows можно использовать утилиту PuTTY Key Generator (Puttygen) из PuTTY. Работать в ней очень просто. Единственное, что в ней нужно сделать — выбрать тип ключа (RSA) и его длину. И нажать кнопку «Generate».


Во время процесса генерации нам рекомендуют двигать мышью внутри окна, чтобы увеличить энтропию. По окончанию процесса увидим такое окно:


В самом верхнем поле мы видим наш публичный ключ. Его можем публиковать хоть на своей странице в соц.сетях. Это не опасно. Отсюда же его и удобно копировать для вставки на сервер. Но об этом позже.

Key fingerprint — отпечаток ключа. Короткая последовательность байт, которая идентифицирует наш публичный ключ.

Key comment — просто комментарий к ключу. Никак не используется и служит только для нашего удобства. Если ключей у вас много от разных серверов, то лучше их подписать.

Key passphrase — а вот сюда необходимо ввести пароль (и ниже повторить), которым мы защитим наш ключ в случае кражи.

После этого жмём кнопки «Save public key» и «Save private key». Впрочем, сохранять публичный ключ не имеет смысла, так как он продублирован в файле приватного ключа.

Примечание
Если необходимо сменить пароль, то нужно просто открыть приватный ключ в Puttygen, ввести в поля новый пароль и пересохранить приватный ключ. Публичный при этом не изменится.

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

Тут всё просто. Вводим в консоли команду ssh-keygen и просто отвечаем на вопросы: куда сохранить ключи и вводим пароль.

user@serv:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nightflash/.ssh/id_rsa):
/home/user/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
b5:60:d8:ed:27:9f:7a:4d:9e:38:e4:bd:23:e0:ec:c0 user@serv
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|       o .       |
|      . + o      |
|       . + .     |
|        S + .    |
|       .  .+...  |
|        Eo +o* . |
|         .o.* *  |
|         .o. o.o |
+-----------------+

В результате будут созданы два файла: /home/user/.ssh/id_rsa.pub и /home/user/.ssh/id_rsa, с публичным и приватным ключами соответственно.

Использование ключей

P.S. Здесь я рассматриваю случай подключения из Windows к Linux серверу.

Для интереса посмотрим содержимое файлов ключей созданных в PuTTY. Публичный ключ:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170813"
AAAAB3NzaC1yc2EAAAABJQAAAQEAidv/Xk0Sj+eHBg91AAX+ISn/RWEoZwFONsKI
rgMwqkZmrqDEFCjbn0aUYSuZjKAOH/uMQHm3KQmtVG62xHePevg4/ZG4bEGeM6le
UZLkCqdhhwat/JTEu9chQZktWF/Ok3IRHOPlZ8Se6Qg3lEBuijSk6VHSSBJeNY+6
tWAtB9h1vrh5PMJce2IEkXJtcFgXVUSvtxOtHpOUwdgNg5U69knrozJXTS6W7Dtb
NFZlf8BYHNy6f/06/dks2r3QFC/f+a7yrj7AMs0HDm/8ZYOBwWS3tuLqyPC2Wx6f
omx2yhIuXr1G+86N9+29Q+lMnAkbMSvCKDwH/9YJxlNKbGAZxw==
---- END SSH2 PUBLIC KEY ----

Этот ключ нам нужно поместить на сервер. Но в данном виде он для этого не годится. Есть два варианта: либо привести ключ к виду:

ssh-rsa XXXXX...........XXXXX комментарий

либо открыть приватный ключ в Puttygen и скопировать Public key оттуда. В том и другом случае ключ будет выглядеть как-то так:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAidv/Xk0Sj+eHBg91AAX+ISn/RWEoZwFONsKIrgMwqkZmrqDEFCjbn0aUYSuZjKAOH/uMQHm3KQmtVG62xHePevg4/ZG4bEGeM6leUZLkCqdhhwat/JTEu9chQZktWF/Ok3IRHOPlZ8Se6Qg3lEBuijSk6VHSSBJeNY+6tWAtB9h1vrh5PMJce2IEkXJtcFgXVUSvtxOtHpOUwdgNg5U69knrozJXTS6W7DtbNFZlf8BYHNy6f/06/dks2r3QFC/f+a7yrj7AMs0HDm/8ZYOBwWS3tuLqyPC2Wx6fomx2yhIuXr1G+86N9+29Q+lMnAkbMSvCKDwH/9YJxlNKbGAZxw== rsa-key-20170813

То есть из ключа удалены переносы строк, перед ним вставлена фраза «ssh-rsa», а после ключа — комментарий. Кстати, в Linux ключ сохраняется сразу в таком виде.

Если вы устанавливаете ключ на сервер вручную, то его необходимо поместить в файл /home/username/.ssh/authorized_keys . На самом сервере это можно сделать к примеру так:

cat id_rsa.pub >> /home/username/.ssh/authorized_keys

Если вы создаёте VDS-сервер, то обычно хостер предоставляет возможность сразу указать ключи. Рассмотрю DigitalOcean и Scaleway.

В панели DigitalOcean необходимо перейти в Settings (настройки), затем выбрать Security (безопасность) и нажать кнопку Add SSH key.

В поля вставляем наш публичный ключ и комментарий.


Готово. Теперь мы видим отпечаток ключа.

У Scaleway делается аналогично. Переходим в Credentials (полномочия?).

Вставляем ключ и нажимаем кнопку Use this SSH key.

Видим ключ:

Который после обновления страницы превращается в отпечаток:

После этого можно создавать VDS-сервер.

Теперь смотрим приватный ключ (часть файла):

PuTTY-User-Key-File-2: ssh-rsa
Encryption: aes256-cbc
Comment: rsa-key-20170813
Public-Lines: 6
AAAAB3NzaC1yc2EAAAABJQAAAQEAidv/Xk0Sj+eHBg91AAX+ISn/RWEoZwFONsKI
rgMwqkZmrqDEFCjbn0aUYSuZjKAOH/uMQHm3KQmtVG62xHePevg4/ZG4bEGeM6le
UZLkCqdhhwat/JTEu9chQZktWF/Ok3IRHOPlZ8Se6Qg3lEBuijSk6VHSSBJeNY+6
tWAtB9h1vrh5PMJce2IEkXJtcFgXVUSvtxOtHpOUwdgNg5U69knrozJXTS6W7Dtb
NFZlf8BYHNy6f/06/dks2r3QFC/f+a7yrj7AMs0HDm/8ZYOBwWS3tuLqyPC2Wx6f
omx2yhIuXr1G+86N9+29Q+lMnAkbMSvCKDwH/9YJxlNKbGAZxw==
Private-Lines: 14
F8Q44u5El96ttrGZkwBB36NhgBohmQI+/8TkBaTCqqLjPGKTl21cSQkp4epdgRn8
9MGsrgktyKC2KqE8N+SWSBIpli7cPqTMlOSowT5gj6RSZs3kpZlgUan5cZG0DN3R
...
gG7WibKiyC3gVraFn4XiyqurZ4uPGZ313flq7dPqE6cYwAqm3JiQXcq5SsklnN+F
Private-MAC: 8d8b1d632d0923614c72d2220902e787d151c145

Абсолютно ничего интересного. К счастью, ничего нам с ним делать не нужно, нам нужен просто этот файл целиком. Открываем программу PuTTY authentication agent (Pageant), которая сразу же прячется в системный трей. Вытаскиваем её оттуда щелчком по значку. Видим такое пустое окно:


Жмём кнопку Add key, выбираем приватный ключ, вводим пароль от него. Всё, ключ загружен. Программу можно закрыть (она будет свёрнута в трей).


Пока Pageant висит в трее с загруженными ключами, у вас есть беспарольный доступ к серверу. Теперь просто как обычно подключаемся к серверу по SSH, используя PuTTY. Вводим логин… и всё) Пароль от нас уже не потребуют.

В следующей статье расскажу об одном из способов хранения SSH ключей.