
Пролог
Итак вам надо клонировать репозиторий с компанейского репозитория и git просит какие-то непонятные пароли, ключи.

или вот такая классическая ситуация

Что делать?
Терминология
Чтобы настроить SSH ключи для GIT репозитория надо понимать вот эту фундаментальную терминологию.
1--контекстное меню - правая кнопка мыши.
2--Shell - это компьютерная программа, которая реализует интерфейс командной строки
3--Переменная окружения (environment variable) - текстовая переменная операционной системы, хранящая какую-либо информацию — например, данные о настройках системы.
4--клонировать репозиторий - скопировать файлы с исходниками в файловую систему на локальный жесткий диск.
5--base64 - стандарт кодирования двоичных данных при помощи только 64 символов ASCII. Алфавит кодирования содержит латинские символы A-Z, a-z, цифры 0-9 (всего 62 знака) и 2 дополнительных символа, зависящих от системы реализации. Каждые 6 бит бинарных данных кодируются одним символом. Base64 - это способ передавать любые двоичные данные символами, которые есть на печатных машинках, используя всего 64 кнопки. Base64 нужен чтобы обыкновенные текстовые редакторы при открытии не показывали кракозябры.
6--ключ - это строка текста, которая обычно представляет собой текст в кодировке base64. Физически ключ - это бинарный массив. Обычно 256 байт.
7--аутентификация - процедура проверки подлинности
8--public key (открытый ключ)- ключ который можно показывать. Этот ключ хранится в файле с расширением *.pub. Закодирован в base64.
9--private key(Закрытый ключ ) - ключ, который никому не надо показывать. Хранится в текстовом файле без расширения. Закодирован в base64.
10--passphrase (парольная фраза) - запоминающийся секрет, обычно последовательность слов, используемый для аутентификации вместо традиционного пароля.
11--Asymmetric cryptography (Асимметричная криптография) - метод шифрования или подписания данных с использованием двух разных ключей (закрытого и открытого).
Что надо из софтвера?
Название программы |
название exe программы |
Версия |
Пояснение |
cmd |
cmd.exe |
10.0.22631.4751 |
терминал командной строки в Windows |
git |
git.exe |
2.45.1 |
Система контроля версий |
PuTTYgen |
puttygen.exe |
0.83 |
инструмент для создания пар открытых и закрытых ключей SSH. |
pageant |
pageant.exe |
0.83 |
агент аутентификации SSH. |
plink.exe |
0.83 |
Утилита подключения командной строки. В основном используется для автоматизированных операций, таких как предоставление GIT доступа к репозиторию на удаленном сервере. |
Как водится в IT, у каждой утилиты есть альтернативная утилита и не одна.
Назначение программы |
Программа |
Альтернатива |
Утилита подключения командной строки. |
plink |
ssh |
инструмент для создания пар открытых и закрытых ключей SSH. |
puttygen |
ssh-keygen |
агент аутентификации SSH |
pageant |
ssh-agent |
plink - Утилита шифрования и дешифрования трафика между компьютерами.
pageant - это менеджер ключей для SSH. Он хранит ваши ключи и сертификаты в памяти, незашифрованные и готовые к использованию ssh. Это избавляет вас от необходимости вводить пароль каждый раз, когда вы подключаетесь к серверу. Он работает в фоновом режиме в вашей системе, отдельно от ssh, и обычно запускается при первом запуске ssh.
puttygen - утилита для генерирования текстовых файлов, содержащих открытый и закрытый ключи в виде текста в кодировке base64
Проверить факт наличия утилиты на PC можно выполнить командой where.
>where pageant
C:\Program Files\PuTTY\pageant.exe
Инструкция
Фаза 1: Синтезировать пару SSH ключей
SSH ключи можно синтезировать утилитой PuTTYgen. Надо нажать на кнопку Generate и поводить мышкой по площади в рамке Key.

Теперь можно придумать passphrase, набрать ее два раза, сохранить открытый ключ, сохранить закрытый ключ. Рassphrase нужна как пароль, чтобы хранить закрытый ключ в зашифрованном виде.

Создаются текстовые файлы с ключами. Для GitLab открытый ключ надо скопировать прямо их окна программы PuTTY Key Generator. Тут важно чтобы не попало ни одного лишнего символа.
Фаза 2: Вставка открытого ключа на сервер GitLab
Надо открыть GitLab, зайти в Edit profile > SSH Keys > Add new key. Вставить в поле Key открытый ключ, придумать подсказку для поля Title и сохранить.

Фаза 3: Настроить GIT
Теперь надо сказать утилите git, что при работе с SSH следует использовать средства программного пакета PuTTY. Надо заставить инструмент командной строки git осознать, что для получения ключа SSH, который должен был использоваться для аутентификации, необходимо использовать инструменты PuTTY. Для этого надо определить переменную окружения GIT_SSH и прописать в нее полный путь до утилиты plink.exe

Фаза 4 Пуск программы agent (Pageant)
При запуске утилиты Pageant не откроется GUI окна. Утилита отобразиться в нижней строке рабочего стола справа в контекстном меню "стрелка вверх". Вы узнаете Pageant по иконке компьютер в шляпе. Pageant тоже открывается через контекстное меню.
Для того чтобы при каждом коммите не набирать пароль придумали Pageant (ssh-agent). Поэтому каждый день при приходе на работу с утра надо выполнить пуск утилиты Pageant, дать ей закрытый пароль и прописать passphrase.

Фаза 5 работа с репозиторием
Вот только теперь можно спокойно работать с удаленным git репозиторием.

Достоинства SSH ключей
1++ В GitLab каждому ключу можно задать время жизни. Например полгода.
2++ Можно создать много ключей: для дома, для офиса, для второго PC.
3++ В GitLab можно отозвать один конкретный ключ без задевания прочих ключей.
Итоги
Удалось настроить SSH соединение для полноценной работы с удалённым GIT репозиторием.

Словарь
Акроним |
Расшифровка |
SSH |
Secure Shell |
RSA |
Rivest, Shamir и Adleman |
CVS |
Concurrent Versions System |
Ссылки
№ |
Название |
URL |
1 |
Secure Shell |
|
2 |
SSH with PuTTY, Pageant and Plink from the Windows Command Line |
|
3 |
Shell (computing) |
|
9 |
Инструкция по Plink |
|
4 |
PuTTYgen |
|
5 |
Про SSH Agent @skillfactory_school |
|
6 |
Вы еще не авторизуетесь по ключам? Тогда мы идем к вам @ahmpro |
|
7 |
||
8 |
||
9 |
Use SSH keys to communicate with GitLab |
Вопросы:
--Почему нельзя просто взять и набрать пароль? Зачем вдруг стали нужны эти открытые и закрытые ключи?
Комментарии (16)
domix32
10.06.2025 10:15Во избежагние головняка крайне не советую использовать PuttyGen т.к. у них получается какой-то свой формат ключей, который привязывают вас к windows. Лучше при установке гита проставлять галочку на установку консоли git (POSIX совместимый терминал для windows) или включить wsl. И уже из них генерить ключи через ssh-keygen, как это предлагают делать в большинстве гитовых хранилищ (раз, два, три). Консоль Git 4 Windows вроде тоже позволяет его использовать, но я им особо не пользовался и могу ошибаться.
Tony-Sol
10.06.2025 10:15Согласен - PuttyGen генерирует приватные ключи в формате ppk, которые вне windows (AFAIK) особо и не нужны. Лучше использовать ssh-keygen (а еще лучше ), а при необходимости (например для FAR) уже сконвертироать имеющийся ключ в ppk
randomsimplenumber
10.06.2025 10:15puttygen экспортирует и импортирует ключи в openssh.
domix32
10.06.2025 10:15была у нас ситуация, когда клиенты нагенерировали ключей putty gen, а потом воткнули PAM посередине. Следом в PAM улетел баг репорт, что что-то не пускает. Ну и вот оказалось, что ключи не шибко подходят, а конвертация почему-то срабатывает не для всех ключей. В итоге на ровном месте нужна новая версия продукта, в которую нужно затягивать ещё одну зависимость и потом её как-то сертифицировать.
В общем - головняк для разрабов, головня для пользователей, головняк для админов, которые ключи эти конвертируют, если конвертируют. Не рекомендую в общем.
randomsimplenumber
10.06.2025 10:15Ну если у вас клиентов существенно больше чем 1 - наверное для них есть подробные инструкции, как генерить ключи, каким софтом и в каком формате.
randomsimplenumber
Можно. Или https там уже отменили?
aabzel Автор
Зачем тогда ssh если есть https?
gvfnk
Есть вариант генерации сертификата и установки его в браузере с последующей аутентификацией и авторизацией по этому сертификату.
Разница в ssh vs https в том, что ssh дает вариант удобной работы из консоли. https и его стандартные методы (как сертификат так и токены) не предполагает вариантов работы с консолью без серьезных костылей.
Для чего надо работать из консоли? Гораздо больше вариантов автоматизации без особых затрат
randomsimplenumber
Кстати, https с токенами значительно удобнее для всяких автоматизаций в консоли. ключ нужно куда-то копировать, а токен можно прямо в скрипте задать, или через environment передать
gvfnk
Уже написаны 1100500 тысяч скриптов, переделывать их на токены это бессмысленные затраты времени т.к. ничего принципиально не изменится.
Ключ не надо копировать, т.к. работа идет не просто так, а в уже готовом окружении.
Там где такого окружения нет можно и используется авторизация по токену.
Второе отличие - ssh это прежде всего пайпы, длительные сессии.
Https это в основном запрос-ответ, поддержание сессий типа вебсокет это немного из другой оперы.
По итогу ssh оказывается значительно менее ресурсоемким если мы выходим за пределы простого git clone\push\pull для всяческих комбайнов типа gitlab\github\jenkins
domix32
Github и Atlassian (ЕМНИП) явным образом запретили клонировать по паролю. То есть без танцев вприсядку приватную репу по https клонировать не выйдет.
Melirius
Нужно сделать токен сейчас для этого. Не сильно понимаю, чем это лучше пароля, но вот так.
randomsimplenumber
Токен действительно лучше.
У него можно задать время жизни. Их одновременно можно нагенерить (и использовать) любое количество. И отозвать любой, без задевания прочих Его можно использовать только в этом месте, больше нигде.