× К оглавлению На главную Об авторе

Дата и время публикации:    
Дата и время модификации:

Проблема и решение

1. Cуть проблемы

На днях (идет о конце июля), когда GitHub сделал объявление о запрете аутентификации с использованием аккаунтов, начиная c 13 ноября 2020. Таким образом, начиная с объявленной даты, GitHub перестанет использовать привычный и доступный многим способ авторизации путем ввода имени пользователя и пароля.

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

2. Решение

2.1 Ключ SSH

Одним из таких решением может стать метод аутентификации и идентификации c использованием ключа RSA, в основе которого находится популярный ныне криптографический алгоритм RSA (прим.автора запрещен на территории России для защиты конфедициальных данных), который, в свою очередь, представляет собой приватный ключ, используемый для аутентификации и обмена симметричными ключами во время установления, открытия сессии SSL/TLS. При этом, может использоваться как часть инфраструктуры публичного ключа, которая главным образом используется в сертификатах SSL и предполагает асимметричное шифрование, где используются два типа ключей: Приватный и публичный ключ, последний включается в сертификат SSL. Поскольку способ передачи данных с применением асимметричного шифрования занимает много времени, этот вид шифрования используется для обмена симметричными ключами, которые используются в целях шифрирования/дешифрирования передаваемых данных.

Протокол SSH использует публичный криптографический ключ (Public key) на основе протокола RSA для подтверждения подлинности узлов и пользователей во время выполнения процедуры аутентификации, поэтому такие ключи называют SSH и создают с использованием программы keygen, как показано в дампе 2.1

Дамп 2.1 Пример создания ключа SSH взят с ssh.com

klar (11:39) ~>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ylo/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ylo/.ssh/id_rsa.
Your public key has been saved in /home/ylo/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Up6KjbnEV4Hgfo75YM393QdQsK3Z0aTNBz0DoirrW+c ylo@klar
The key's randomart image is:
+---[RSA 2048]----+
|    .      ..oo..|
|   . . .  . .o.X.|
|    . . o.  ..+ B|
|   .   o.o  .+ ..|
|    ..o.S   o..  |
|   . %o=      .  |
|    @.B...     . |
|   o.=. o. . .  .|
|    .oo  E. . .. |
+----[SHA256]-----+
klar (11:40) ~>

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

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

Кроме, алгоритм RSA в SSH поддерживаются:

2.2 Cоздание и использование ключа SSH

1.2 Генерация ключа SSH c рекомендуемым размером 4096 для всем понятного алгоритма RSA, на стороне клиента, производится запуском уже выше упомнутой командой ssh-keygen в консольном интерфейсе пользователя, как показано в дампе 2.2.1

Дамп 2.2.1

$ ssh-keygen -t rsa -b 4096 -C "User's RSA key"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/id_user_rsa       
Enter passphrase (empty for no passphrase):
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_user_rsa
Your public key has been saved in /home/user/.ssh/id_user_rsa.pub
The key fingerprint is:
SHA256:1GGhN30V9LbgEdtcXKWB6eaTc+wTasJtu3xuFRGjHxA User's RSA key
The key's randomart image is:
+---[RSA 4096]----+
|          +. E+*X|
|         + oo B==|
|        o +..=o++|
|       . . .+.+oo|
|        S  o + o.|
|            = + .|
|         . . * o |
|          o.= =  |
|           ++*.. |
+----[SHA256]-----+

При этом, в выделенных фразах:

"Enter file in which to save the key..."

Вводится местоположение ключа /home/user/.ssh/id_user_rsa в домашней директории пользователя вместо обычно предлагаемого по умолчанию /home/user/.ssh/id_rsa

"Enter passphrase..." и "Enter same passphrase again..."

Предлогается усилить ключ RSA секретным словом, которое клиент SSH будет запрашивать в качестве пароля для запуска процедура аутентификации, пустой пароль — два раза нажатая клавиша Enter .

В результате в рабочей директории ~/.ssh/ будут созданы два файла содержащие:

После чего, определить имя пользователя к хосту GitHub, например, широко используемого имени git, в файле ~/.ssh/config добавить, как показано в дампе 2.2.2

Дамп 2.2.2

...
host github.com
        HostName github.com
        IdentityFile ~/.ssh/id_user_rsa
        User git
...

При этом нужно помнить, что только полученный окрытый ключ и именно только такой формата принимает GitHub,но если же перепутать формат файла или в копируемом содержимом открытого ключа вкрадется ошибка, процедура добавления только что созданного ключа RCA завершится с ошибкой, как показано на рисунке 2.2.3a

Рисунок 2.2.3a

Поэтому берем файл ~/.ssh/id_user_rsa.pub и копируем в буфер обмена, как показано в дампе 2.2.3б

Дамп 2.2.3б

   
$ xclip -selection clipboard < ~/.ssh/id_user_rsa.pub

А затем, в предпочитаемом браузере WEB открыть на GitHub в своем профиле страничку с персональными настройками (Personal settings) и выбрать раздел "SSH и GPG keys", в нем нажать кнопку "New SSH key" и осуществить вставку только что скопированного публичного ключа, как показано на рисунке 2.2.4

Рисунок 2.2.4

При этом, как показано на рисунке 2.2.4, в качестве заголовка можно использовать "User's RSA key", указанную ранее в опции -C утилиты ssh-keygen комментарий к RSA ключу, чтобы потом не запутаться в приcвоенных именах ключей на сервере и клиенте. При этом первая строчка должна содержать обязательно ключевое слово "ssh-rsa", по которому нужно ореентироваться, что взят именно тот ключ, который нужно.

Для завершения добавления ключа SSH не забудьте нажать кнопку "Add SSH key" .

В результате должно получиться, что-то подобное, как показано на рисунке 2.2.5

Рисунок 2.2.5

Соответственно, если все было сделано правильно вам станут доступны все команды, подобные "Git push", т.е. вносящие изменения в репозитарий и/или базу исходного кода проекта, которые теперь с августа 2021 года использовать по паролю запрещено.

Библиография

3.1 What is an RSA key used for?

3.2 ssh-keygen - Generate a New SSH Key

3.3 Adding a new ssh key to your github account

3.4 Теоретические основы цифровой связи

3.5 GitHub Blog. Token authentication requirements for API and Git operations

Сайт разработан в соответствии с рекомендациями консорциума W3C для языка разметки HTML5.

Об авторе можно прочитать здесь.

Copyright © 2015-2019 Андрей Ржавсков