Пролог

Итак вам надо клонировать репозиторий с компанейского репозитория и 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

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

Ссылки

Вопросы:

--Почему нельзя просто взять и набрать пароль? Зачем вдруг стали нужны эти открытые и закрытые ключи?

Комментарии (16)


  1. randomsimplenumber
    10.06.2025 10:15

    Почему нельзя просто взять и набрать пароль?

    Можно. Или https там уже отменили?


    1. aabzel Автор
      10.06.2025 10:15

      Зачем тогда ssh если есть https?


      1. gvfnk
        10.06.2025 10:15

        Есть вариант генерации сертификата и установки его в браузере с последующей аутентификацией и авторизацией по этому сертификату.
        Разница в ssh vs https в том, что ssh дает вариант удобной работы из консоли. https и его стандартные методы (как сертификат так и токены) не предполагает вариантов работы с консолью без серьезных костылей.
        Для чего надо работать из консоли? Гораздо больше вариантов автоматизации без особых затрат


        1. randomsimplenumber
          10.06.2025 10:15

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


          1. gvfnk
            10.06.2025 10:15

            Уже написаны 1100500 тысяч скриптов, переделывать их на токены это бессмысленные затраты времени т.к. ничего принципиально не изменится.
            Ключ не надо копировать, т.к. работа идет не просто так, а в уже готовом окружении.
            Там где такого окружения нет можно и используется авторизация по токену.
            Второе отличие - ssh это прежде всего пайпы, длительные сессии.
            Https это в основном запрос-ответ, поддержание сессий типа вебсокет это немного из другой оперы.
            По итогу ssh оказывается значительно менее ресурсоемким если мы выходим за пределы простого git clone\push\pull для всяческих комбайнов типа gitlab\github\jenkins


    1. domix32
      10.06.2025 10:15

      Github и Atlassian (ЕМНИП) явным образом запретили клонировать по паролю. То есть без танцев вприсядку приватную репу по https клонировать не выйдет.


      1. Melirius
        10.06.2025 10:15

        Нужно сделать токен сейчас для этого. Не сильно понимаю, чем это лучше пароля, но вот так.


        1. randomsimplenumber
          10.06.2025 10:15

          Токен действительно лучше.

          У него можно задать время жизни. Их одновременно можно нагенерить (и использовать) любое количество. И отозвать любой, без задевания прочих Его можно использовать только в этом месте, больше нигде.


  1. domix32
    10.06.2025 10:15

    Во избежагние головняка крайне не советую использовать PuttyGen т.к. у них получается какой-то свой формат ключей, который привязывают вас к windows. Лучше при установке гита проставлять галочку на установку консоли git (POSIX совместимый терминал для windows) или включить wsl. И уже из них генерить ключи через ssh-keygen, как это предлагают делать в большинстве гитовых хранилищ (раз, два, три). Консоль Git 4 Windows вроде тоже позволяет его использовать, но я им особо не пользовался и могу ошибаться.


    1. Tony-Sol
      10.06.2025 10:15

      Согласен - PuttyGen генерирует приватные ключи в формате ppk, которые вне windows (AFAIK) особо и не нужны. Лучше использовать ssh-keygen (а еще лучше ), а при необходимости (например для FAR) уже сконвертироать имеющийся ключ в ppk


    1. aabzel Автор
      10.06.2025 10:15

      Когда я работал в яндексе, там генерировали SSH ключи к репозиторию через РuTTY.


      1. domix32
        10.06.2025 10:15

        Мне даже интересно стало, сколько разрабов там из под винды сидят.


        1. aabzel Автор
          10.06.2025 10:15

          Все кто программируют в ide IAR как раз работают там на windows.


    1. randomsimplenumber
      10.06.2025 10:15

      puttygen экспортирует и импортирует ключи в openssh.


      1. domix32
        10.06.2025 10:15

        была у нас ситуация, когда клиенты нагенерировали ключей putty gen, а потом воткнули PAM посередине. Следом в PAM улетел баг репорт, что что-то не пускает. Ну и вот оказалось, что ключи не шибко подходят, а конвертация почему-то срабатывает не для всех ключей. В итоге на ровном месте нужна новая версия продукта, в которую нужно затягивать ещё одну зависимость и потом её как-то сертифицировать.

        В общем - головняк для разрабов, головня для пользователей, головняк для админов, которые ключи эти конвертируют, если конвертируют. Не рекомендую в общем.


        1. randomsimplenumber
          10.06.2025 10:15

          Ну если у вас клиентов существенно больше чем 1 - наверное для них есть подробные инструкции, как генерить ключи, каким софтом и в каком формате.