Правильный способ доступа к репозиторию, управляемому gitlab, - это добавить открытый ключ.
Во-первых, вам нужно создать пару ключей: (это команды для машины linux, и я считаю, что они также работают на windows, если у вас установлен git для windows, который устанавливает среду cygwin)
cd ~/.ssh #create this dir if it's absent
ssh-keygen -t rsa -b 2048 #i like 2048 bit rsa keys, but you could use -b 1024 instead
когда будет предложено, дайте имя ключевому файлу, скажем, вы назвали его "my_key", он попросит вас ввести ключевую фразу. Если вы введете один из них, закрытый ключ (см. Ниже) будет зашифрован с помощью этой ключевой фразы, поэтому вам придется правильно установить ключевой файл и ввести кодовую фразу для выполнения операции git. Вы также можете оставить это поле пустым, что менее безопасно, но более удобно.
Это генерирует ~/.ssh/my_key
и ~/.ssh/my_key.pub
. Файл .pub - это открытый ключ, другой - закрытый ключ. Теперь вам нужно сделать две вещи:
- Дайте открытый ключ серверу
- Настройте свой ssh-клиент, чтобы знать о нем и использовать закрытый ключ
чтобы сделать 1., откройте my_key.pub в редакторе и скопируйте содержимое в буфер обмена. Затем войдите в gitlab через веб-интерфейс. В верхнем правом углу вы найдете случайно сгенерированную картинку, которая при наведении курсора даст вам две опции: "Мой профиль" и "Выход". Нажмите на первый. Справа от появившейся страницы вы увидите кнопку "Добавить открытый ключ". Нажмите на нее, и вы увидите страницу, где вы можете вставить открытый ключ, который вы скопировали. Дайте ему имя, нажмите "Сохранить", и все готово.
чтобы сделать 2. (снова в Linux), откройте (создайте, если необходимо) файл ~/.ssh/config
и добавьте следующую строку:
IdentityFile ~/.ssh/my_key
Это заставляет ssh пытаться использовать закрытый ключ при входе на любой сайт, который пытается использовать аутентификацию по ключу.
Фон на ключах (если вы не знали): ключи, используемые ssh, называются асимметричными ключами. Существует "открытый ключ" и "закрытый ключ", и они генерируются как пара (они математически связаны). Все, что зашифровано с использованием открытого ключа, может быть расшифровано только с помощью личного ключа, и наоборот. ssh использует их для аутентификации: вы предоставляете серверу открытый ключ, а вашему клиенту - соответствующий закрытый ключ. Когда вы пытаетесь войти в систему, сервер в основном берет некоторые случайные данные, шифрует их с помощью открытого ключа и отправляет их клиенту. Клиент расшифровывает с помощью закрытого ключа и отправляет исходные случайные данные обратно на сервер. Затем сервер знает, что вы тот человек, о котором вы говорите (потому что ваш клиент смог успешно расшифровать).