Создание ssh ключей для аутентификации: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
 
(не показано 11 промежуточных версий этого же участника)
Строка 1: Строка 1:
В давным давно, когда хакеры были не столь активны, аутентификации и безопастности удалённого администрирования не уделялось столь большое внимание.  Трафик не шифровался и становился лёгкой добычей для злоумышленников. Для избежания этих ситуаций был разработан протокол [http://ru.wikipedia.org/wiki/SSH ssh] ([http://tools.ietf.org/html/rfc4251 RFC4251]. В поледствии он получил широчайшее распространение на Unix системах.
В давным давно, когда хакеры были не столь активны, аутентификации и безопастности удалённого администрирования не уделялось столь большое внимание.  Трафик не шифровался и становился лёгкой добычей для злоумышленников. Для избежания этих ситуаций был разработан протокол [[wikipedia:ru:SSH|ssh]] ([http://tools.ietf.org/html/rfc4251 RFC4251]. В поледствии он получил широчайшее распространение на Unix системах.


В кратце суть футентификации по двум ключам проста. Имеется один секретный ключ, который не должен быть доступен никому кроме его владельца и один публичный ключ, которым может владеть любой встречный. Публичный ключ уникально связан с вашим секретным ключом но из него воссоздать ваш секрутный не получится. Процесс аутентификации прост - вы кладёте публичный ключ на сервер и в следующий раз когда вы хотите залогинится на него по [http://ru.wikipedia.org/wiki/SSH ssh], сервер берёт ваш публичный ключ и сверяет с тем приватным (секретным) ключом, который вы ему показываете. Т.к. они уникально связанны, то сервер однозначно определяет, что это именно вы зашли на него.
В кратце суть футентификации по двум ключам проста. Имеется один секретный ключ, который не должен быть доступен никому кроме его владельца и один публичный ключ, которым может владеть любой встречный. Публичный ключ уникально связан с вашим секретным ключом но из него воссоздать ваш секрутный не получится. Процесс аутентификации прост - вы кладёте публичный ключ на сервер и в следующий раз когда вы хотите залогинится на него по [[wikipedia:ru:SSH|ssh]], сервер берёт ваш публичный ключ и сверяет с тем приватным (секретным) ключом, который вы ему показываете. Т.к. они уникально связанны, то сервер однозначно определяет, что это именно вы зашли на него.


Рассмотрим как создать ssh пару ключей для удалённого администрирования сервера.
Рассмотрим как создать ssh пару ключей для удалённого администрирования сервера.
Строка 7: Строка 7:
Заходим на сервер и в консоли вводим
Заходим на сервер и в консоли вводим


ssh-keygen -t rsa -b 2048
{{Command| ssh-keygen -t rsa -b 2048}}


Тем самым мы создаём ключ типа rsa для протокола ssh2, битностью 2048. Считается, что болеее большая битность чем дефолтная (умолчальная битность 1024) не даст большей защиты но снизит скорость работы, однако, ИМХО данное утверждение уже порядком устарело и щас есть смысл ставить её повыше.  
Тем самым мы создаём ключ типа rsa для протокола ssh2, битностью 2048. Считается, что более большая битность чем дефолтная (умолчальная битность 1024) не даст большей защиты но снизит скорость работы, однако, ИМХО данное утверждение уже порядком устарело и щас есть смысл ставить её повыше.
 
===Twisted Edwards curve - Ed25519===
 
В текущих реалиях имеет смысл перейти на алгоритм '''Ed25519'''  (Twisted Edwards curve), который работает быстрее при том же уровне защиты за счёт более короткого ключа. Сегодня RSA с ключом менее 2048 бит считается небезопасным.
 
Для генерации ключа в новом формате используй команду:
 
{{Command|ssh-keygen -o -a 256 -t ed25519 -C "alex@router_a"}}
 
'''-o''': Save the private-key using the new OpenSSH format rather than the PEM format. Actually, this option is implied when you specify the key type as ed25519.
 
'''-a''': It’s the numbers of KDF (Key Derivation Function) rounds. Higher numbers result in slower passphrase verification, increasing the resistance to brute-force password cracking should the private-key be stolen. Default is 16.
 
'''-t''': Specifies the type of key to create, in our case the Ed25519.
 
'''-C''': An option to specify a comment. It’s purely informational and can be anything. But it’s usually filled with <login>@<hostname> who generated the key.
 
После выполнения команды нас попросят ввести имя файла, куда сохранить пару ключей.
{{Code|Диалог в консоли - введите имя файла|<pre>Enter file in which to save the key (/home/alex/.ssh/id_rsa):</pre>}}
 
Затем надо надо будет ввести контрольную фразу аутентификации - тоесть дополнительно предлагают защитить ключ паролем.
{{Code|Диалог в консоли - введите PassPhrase|<pre>Enter passphrase (empty for no passphrase):</pre>}}
 
Таким образом, при логировании у нас будет 4 степени защиты: 1) Сам секретный ключ, 2) Логин, 3) Фраза аутентификации, 4)Пароль на пользователя.
 
После выполнения команды, указанной выше мы получаем SSH2 ключ в формате OpenSSH.
 
Для возможности входа на сервер создаём в домашней папке пользоватя файл '''authorized_keys''' по следующему пути:
 
{{Path|~/.ssh/authorized_keys}}
 
В этот файл записываем наш публичный ключ. У меня он называется '''id_rsa.pub''':
 
{{Command|cat id_rsa.pub > ~/.ssh/authorized_keys}}
 
Если же это не первый наш ключ то пишем его в конец файла вот так:
 
{{Command|cat id_rsa.pub >> ~/.ssh/authorized_keys}}
 
Права на файл должны быть следующими:
{{Code|Права на файл|<pre>
-rw------- 1 alex users  396 Nov 12 15:03 authorized_keys (0600)
drwx------ 2 alex users 4096 Jul 17 16:30 .ssh (0700)
</pre>}}
==Использование Putty для коннекта к серверу==
Дело в том что Putty НЕ воспримет формат ключа, который мы использовали для его создания (OpenSSH). Для этого надо переконвертировать его в формат, который понимает Putty - '''*.ppk'''
 
Для этого качаем программку - [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTYgen]
 
В меню программы идём в {{Keyword|Conversions -> Import}} и выбираем приватный файл, который только, что сгенирировали. Далее вводим PassPhrase, а потом сохраняем наш новый файл '''save private key'''. Там же можно сменить и коментарий к нашему ключу - поле '''Key Comment'''.
 
После этого мы имеем наш новый приватный ключ в формате *.ppk.


==Ссылки==
==Ссылки==
Строка 15: Строка 67:
* [http://www.opennet.ru/base/sec/ssh_pubkey_auth.txt.html ssh-keygen]
* [http://www.opennet.ru/base/sec/ssh_pubkey_auth.txt.html ssh-keygen]


[[Category:Linux|ssh Создание ключей аутентификации]]
[[Category:Linux|SSH создание ключей аутентификации]]
[[Category:Index|SSH создание ключей аутентификации]]

Текущая версия на 15:20, 3 августа 2022

В давным давно, когда хакеры были не столь активны, аутентификации и безопастности удалённого администрирования не уделялось столь большое внимание. Трафик не шифровался и становился лёгкой добычей для злоумышленников. Для избежания этих ситуаций был разработан протокол ssh (RFC4251. В поледствии он получил широчайшее распространение на Unix системах.

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

Рассмотрим как создать ssh пару ключей для удалённого администрирования сервера.

Заходим на сервер и в консоли вводим

ssh-keygen -t rsa -b 2048

Тем самым мы создаём ключ типа rsa для протокола ssh2, битностью 2048. Считается, что более большая битность чем дефолтная (умолчальная битность 1024) не даст большей защиты но снизит скорость работы, однако, ИМХО данное утверждение уже порядком устарело и щас есть смысл ставить её повыше.

Twisted Edwards curve - Ed25519

В текущих реалиях имеет смысл перейти на алгоритм Ed25519 (Twisted Edwards curve), который работает быстрее при том же уровне защиты за счёт более короткого ключа. Сегодня RSA с ключом менее 2048 бит считается небезопасным.

Для генерации ключа в новом формате используй команду:

ssh-keygen -o -a 256 -t ed25519 -C "alex@router_a"

-o: Save the private-key using the new OpenSSH format rather than the PEM format. Actually, this option is implied when you specify the key type as ed25519.

-a: It’s the numbers of KDF (Key Derivation Function) rounds. Higher numbers result in slower passphrase verification, increasing the resistance to brute-force password cracking should the private-key be stolen. Default is 16.

-t: Specifies the type of key to create, in our case the Ed25519.

-C: An option to specify a comment. It’s purely informational and can be anything. But it’s usually filled with <login>@<hostname> who generated the key.

После выполнения команды нас попросят ввести имя файла, куда сохранить пару ключей.

Code: Диалог в консоли - введите имя файла
Enter file in which to save the key (/home/alex/.ssh/id_rsa):

Затем надо надо будет ввести контрольную фразу аутентификации - тоесть дополнительно предлагают защитить ключ паролем.

Code: Диалог в консоли - введите PassPhrase
Enter passphrase (empty for no passphrase):

Таким образом, при логировании у нас будет 4 степени защиты: 1) Сам секретный ключ, 2) Логин, 3) Фраза аутентификации, 4)Пароль на пользователя.

После выполнения команды, указанной выше мы получаем SSH2 ключ в формате OpenSSH.

Для возможности входа на сервер создаём в домашней папке пользоватя файл authorized_keys по следующему пути:

~/.ssh/authorized_keys

В этот файл записываем наш публичный ключ. У меня он называется id_rsa.pub:

cat id_rsa.pub > ~/.ssh/authorized_keys

Если же это не первый наш ключ то пишем его в конец файла вот так:

cat id_rsa.pub >> ~/.ssh/authorized_keys

Права на файл должны быть следующими:

Code: Права на файл
 -rw------- 1 alex users  396 Nov 12 15:03 authorized_keys (0600)
 drwx------ 2 alex users 4096 Jul 17 16:30 .ssh (0700)

Использование Putty для коннекта к серверу

Дело в том что Putty НЕ воспримет формат ключа, который мы использовали для его создания (OpenSSH). Для этого надо переконвертировать его в формат, который понимает Putty - *.ppk

Для этого качаем программку - PuTTYgen

В меню программы идём в Conversions -> Import и выбираем приватный файл, который только, что сгенирировали. Далее вводим PassPhrase, а потом сохраняем наш новый файл save private key. Там же можно сменить и коментарий к нашему ключу - поле Key Comment.

После этого мы имеем наш новый приватный ключ в формате *.ppk.

Ссылки