Дата и время публикации:
Дата и время модификации:
Проблема и решение
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 поддерживаются:
- Устаревший алгоритм DSA (Digital Signature Algorithm или Алгоритм Электронной Цифровой Подписи, ЭЦП), основанный на сложности вычисления дискретных алгоритмов. Обычно используемый размер ключа 1024 . При этом использовать ключ в своей привычной форме не рекомендуется.
- Алгоритм ECDSA считается новой версией стандартизованного Американским правительством ЭЦП, использующего эллиптические кривые и считается не плохим алгоритмом для текущего использования. Поддерживает три значения ключа: 256, 384 и 521 разрядов. При этом рекомендуется использовать последний размер, равным 521 и поддерживается большинством клиентов SSH .
- ED25519 один из последних алгоритмов (на момент публикации статьи). Пока еще не поддерживается всеми клиентами, поэтому следует использовать только в своих целях.
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/ будут созданы два файла содержащие:
- приватный ключ ~/.ssh/id_user_rsa;
- публичный ключ ~/.ssh/id_user_rsa.pub .
После чего, определить имя пользователя к хосту 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