Table of contents

Создание и добавление ssh-ключа

SSH-ключи используются для аутентификации вашего компьютера на удалённом сервере, в данном случае на сервере GitLab. Благодаря этому вы можете подтверждать свою личность без ввода пароля.

Чтобы создать ключ, откройте терминал или командную строку и введите команду для генерации ключей ssh-keygen. Если вы хотите сгенерировать их в определённой папке, то введите путь до неё. При генерации ключа можно указать пароль, но это необязательно.

Подробная инструкция по генерации ключей находится по это ссылке docs.gitlab.com/17.0/ee/user/ssh.html

☝️
ssh или https
Если при работе с ssh возникнут проблемы, то всегда можно использовать способ работы через https. В разделе документации работы с репозиторием используется пример с подключением через https.

Для генерации ключа желательно использовать консоль Git Bash.

Выполним команду

ssh-keygen -t ed25519

Если вы хотите сгенерировать ключ в определённой папке со своим названием, то введите путь до неё и название файла.
Так, в моем примере, было изменено название файла с /c/Users/xTCry/.ssh/id_ed25519 на /c/Users/xTCry/.ssh/id_git_ystu

При генерации ключа можно указать пароль, который будет запрашиваться каждый раз при использовании ssh, но это необязательно (просто нажать Enter).

Как мы можем видеть в сообщении, что в указанной папке у нас появится два файла с ключами — приватный (id_git_ystu) и открытый (id_git_ystu.pub).

Добавлять в GitLab нужно второй файл с расширением .pub. Откройте его в текстовом редакторе и скопируйте содержимое в буфер обмена.

Или выполните в консоли команду cat с указанием пути до публичного ключа.
cat /c/Users/xTCry/.ssh/id_git_ystu.pub

Перейдите на страницу добавления вашего ssh-ключа на GitLab через меню настроек профиля и пункт Ключи SSH.

Нажмите на кнопку добавления ключа

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

Теперь вы можете работать со своими проектами в git через ssh подключение, а не только https с авторизацией по логину/паролю.

Проверим, что ssh успешно подключается к нашему GitLab пространству. 

Выполните команду в Bash консоли для простого подключения к ssh GitLab сервера

Если подключение прошло успешно и вывод содержит следующее, то всё отлично и можете клонировать/пушить и пуллить проекты

PTY allocation request failed on channel 0
Welcome to GitLab, @ivanovaa.20!
Connection to git.ystu.ru closed.
bash

Если же при подключении у вас запрашивается ввод пароля, то значит наш приватный ключ не был обнаружен ssh-агентом или конфигом.

Неудачная попытка подключения к ssh из-за неверного ключа

Тогда нам следует настроить конфиг подключения ssh

Для начала можно проверить, что мы можем подключиться по конкретному ключу.
Выполните команду (в аргумент -i передается путь к сгенерированному приватному ключу). Если пир генерации ключа был указан другой путь и/или название файла, то замените на свое.

ssh [email protected] -i ~/.ssh/id_ed25519

Если подключение было успешным, то можно приступить к настройке конфига, чтобы не указывать путь к ключу каждый раз.

Выполните команду nano ~/.ssh/config для редактирования файла в Bash консоли.
Или можете открыть этот файл в любом редакторе по пути (Windows) C:\Users\<username>\.ssh\config 

Предположим, что мы работаем через консоль

Редактирование файла через редактор nano

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

Host git.ystu.ru git.ystuty.ru HostName git.ystu.ru User git IdentityFile ~/.ssh/id_ed25519

В параметре IdentifyFile указывается путь к нашему приватному ключу. Если при генерации ключа вы не изменяли путь и/или название, то вносить изменения не надо.
Если вы также указали название ключа как в примере на id_git_ystu, то надо изменить IdentityFile ~/.ssh/id_ed25519 на IdentityFile ~/.ssh/id_git_ystu и сохраняем файл.

Чтобы сохранить файл в редакторе nano, нужно нажать следующее сочетание клавиш: Ctrl+X, чтобы выполнить выход; потом нажать Y, чтобы подтвердить, что мы хотим сохранить изменения, а потом Enter.

Сохранение конфига ssh

Теперь можно снова попробовать выполнить команду 

И убедиться, что подключение по нужному ключу произошло успешно

Успешное подключение по ssh