1. Введение
В последние годы популярность git резко возросла по сравнению с другими системами SCM, такими как subversion. С появлением бесплатных платформ, таких как GitHub и GitLab, стало проще, чем когда-либо, создавать безопасные версии и сохранять код нашего приложения .
Но постоянный ввод учетных данных может быть громоздким и трудным для создания автоматизированных конвейеров CI/CD. Итак, в этом руководстве мы рассмотрим, как настроить учетные данные git, чтобы не вводить их вручную.
2. Ввод учетных данных
Всякий раз, когда для удаленного подключения требуется аутентификация, у git есть несколько способов поиска учетных данных для использования .
Давайте начнем с основ, в которых учетные данные не были настроены. Если git требуется имя пользователя и пароль для доступа к удаленному соединению, он предпринимает следующие шаги, чтобы запросить ввод данных у пользователя.
Во-первых, он пытается вызвать приложение, которое позволяет пользователям вводить учетные данные. Следующие значения проверяются (по порядку), чтобы определить приложение для использования:
- `
Переменная среды
GIT_ASKPASS` - `
переменная конфигурации
core.askPass` - `
Переменная среды
SSH_ASKPASS`
Если какой-либо из них установлен, приложение вызывается, и пользовательский ввод считывается из его стандартного вывода.
Если ни одно из этих значений не установлено, git возвращается к запросу пользователя на ввод в командной строке.
3. Хранение учетных данных
Ввод имен пользователей и паролей может быть утомительным, особенно при частом выполнении кода в течение дня. Ввод паролей вручную подвержен ошибкам, а также затрудняет создание автоматизированных конвейеров.
Чтобы помочь в этом, git предоставляет несколько способов хранения имен пользователей и паролей. Мы рассмотрим каждый способ в следующих разделах.
3.1. Имя пользователя и пароль в URL-адресах
Некоторые провайдеры git позволяют вставлять имя пользователя и пароль вместе в URL-адрес репозитория. Это можно сделать, когда мы клонируем репозиторий:
git clone https://<username>:<password>@gitlab.com/group/project.git
Имейте в виду , что если пароль содержит специальные символы, их необходимо экранировать , чтобы оболочка не пыталась их интерпретировать.
Кроме того, мы можем отредактировать файл конфигурации git внутри репозитория, включив в него имя пользователя и пароль:
url = https://<username>:<password>@<code class="language-shell">gitlab.com/group/project.git
В любом случае, помните, что имя пользователя и пароль хранятся в виде обычного текста, поэтому любой, у кого есть доступ к репозиторию, сможет их увидеть.
3.2. Контексты учетных данных
Git также позволяет настраивать учетные данные для каждого контекста. Следующая команда настроит определенный контекст git для использования определенного имени пользователя:
git config --global credential.https://github.com.username <your_username>
Кроме того, мы можем напрямую редактировать наш глобальный файл конфигурации git. Обычно это находится в нашем домашнем каталоге в файле с именем .gitconfig
, и мы должны добавить следующие строки:
[credential "https://github.com"]
username = <username>
Этот метод также небезопасен, поскольку имя пользователя хранится в виде простого текста . Он также не позволяет хранить пароли, поэтому git будет продолжать запрашивать их.
4. Помощники по учетным данным
Git предоставляет помощников по учетным данным для более безопасного сохранения учетных данных. Помощники по учетным данным могут хранить данные несколькими способами и даже интегрироваться со сторонними системами, такими как цепочки для ключей паролей.
Из коробки git предоставляет 2 основных помощника по учетным данным :
- Кэш: учетные данные хранятся в памяти на короткое время.
- Хранить: учетные данные хранятся на диске неограниченное время.
Мы рассмотрим каждый следующий.
4.1. Помощник по кэшированию учетных данных
Помощник по учетным данным кэша можно настроить следующим образом:
git config credential.helper cache
Помощник по кэшированию учетных данных никогда не записывает учетные данные на диск, хотя эти учетные данные доступны через сокеты Unix. Эти сокеты защищены с помощью прав доступа к файлам, которые ограничены пользователем, который их сохранил, поэтому, вообще говоря, они безопасны.
Мы также можем предоставить аргумент тайм
-аута при настройке помощника по учетным данным кэша. Это позволяет нам контролировать, как долго учетные данные остаются в памяти:
git config credential.helper 'cache --timeout=86400'
Это сохранит учетные данные в памяти в течение 1 дня после их ввода.
4.2. Помощник по хранению учетных данных
Помощник хранилища учетных данных сохраняет учетные данные в файле на неопределенный срок . Мы можем настроить помощник хранилища учетных данных следующим образом:
git config credential.helper store
Хотя содержимое файла не зашифровано, оно защищено с помощью элементов управления доступом к файловой системе для пользователя, создавшего файл .
По умолчанию файл хранится в домашнем каталоге пользователя. Мы можем переопределить расположение файла, передав аргумент файла
команде:
git config credential.helper 'store --file=/full/path/to/.git_credentials'
4.3. Пользовательские помощники по учетным данным
Помимо двух стандартных помощников по учетным данным, упомянутых выше, можно настроить собственные помощники . Это позволяет нам осуществлять более сложное управление учетными данными, делегируя их сторонним приложениям и службам.
Создание пользовательских помощников по учетным данным — это не то, о чем нужно беспокоиться большинству пользователей . Однако есть несколько причин, по которым они могут быть полезны:
- Интеграция с инструментами операционной системы, такими как Keychain на macOS.
- Внедрение существующих корпоративных схем аутентификации, таких как LDAP или Active Directory.
- Обеспечьте дополнительные механизмы безопасности, такие как двухфакторная аутентификация.
5. SSH-ключи
Большинство современных серверов git предоставляют способ доступа к репозиториям с использованием ключей SSH вместо имени пользователя и пароля через HTTPS. Ключи SSH сложнее угадать, чем пароль, и их можно легко отозвать, если они будут скомпрометированы .
Основным недостатком использования SSH является то, что он использует нестандартные порты. Некоторые сети или прокси-серверы могут блокировать эти порты, делая связь с удаленным сервером невозможной . Они также требуют дополнительных шагов для настройки ключей SSH как на сервере, так и на клиенте, что может быть обременительно в крупных организациях.
Самый простой способ включить SSH для репозитория git — использовать ssh для протокола при его клонировании:
git clone git@gitlab.com:group/project.git
Для существующего репозитория мы можем обновить пульт с помощью следующей команды:
git remote set-url origin git@gitlab.com:group/project.git
Процесс настройки ключей SSH немного различается для каждого сервера git. В общем, шаги такие:
- Создайте совместимую комбинацию открытого и закрытого ключей на вашем компьютере.
- Загрузите открытый ключ на свой сервер git
У большинства пользователей Unix/Linux уже есть пара ключей SSH, созданная и настроенная в их домашнем каталоге, и они загрузят существующий открытый ключ. Напоминаем, что мы никогда не должны загружать или иным образом делиться нашим закрытым ключом .
6. Заключение
В этом руководстве мы рассмотрели различные способы настройки учетных данных git. Самый распространенный способ — использовать встроенный помощник по учетным данным для локального хранения учетных данных в памяти или в файле на диске. Более сложный и безопасный способ хранения учетных данных — использование SSH, хотя это может быть более сложным и работать не во всех сетях.