Обновление репозитория git без ввода паролей
Есть корпоративный аккаунт «А» с приватными репозиториями на github.com;
есть аккаунт «B» — мой обычный аккаунт, который имеет административный доступ к репозиториям аккаунта «А». При обновлении репозитория на сервере через консоль командой git pull система каждый раз запрашивает пароль. Ввожу пароль аккаунта «В» и команда успешно выполняетя. Вопрос: как сделать так, чтобы при вводе команды из консоли, система не запрашивала пароль? Это должно позволить выполнять обновление репозитория из php. Что для этого нужно, размещать какой-то специальный ключ на сервере?
Отслеживать
33.9k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
задан 29 апр 2015 в 12:41
1,142 5 5 золотых знаков 22 22 серебряных знака 53 53 бронзовых знака
remote для репозитория указан как https или как ssh?
29 апр 2015 в 12:48
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Запустите в консоли команду git remote -v и посмотрите, через какой протокол у вас осуществляется доступ к репозиторию.
Если это https, то будет примерно следующий путь:
https://github.com/USERNAME/OTHERREPOSITORY.git
Для ssh будет такой:
[email protected]:USERNAME/OTHERREPOSITORY.git
https
Требуется Git версии не ниже 1.7.10
В этом случае вам всегда требуется указывать пароль при общении с сервером. Git можно попросить сохранять на некоторое время (по умолчанию на 15 минут) введённые данные командой:
> git config --global credential.helper cache
При желании можно изменить стандартное время запоминания командой
> git config --global credential.helper "cache --timeout=3600"
(время указывается в секундах)
Вы можете также указать git хранить ваши данные постоянно:
> git config credential.helper store
При этом ваши данные будут храниться в открытом виде в файле .git-credentials.
Обнулить настройки этой возможности можно командой:
> git config --unset credential.helper
При желании можно подобное поведение для всех репозиториев, для этого нужно передать дополнительный ключ —global .
В зависимости от этой настройки, информация с вашими данными будет расположена либо в каталоге проекта, либо в $HOME
Вы можете указать информацию для авторизации в url, по которому осуществляете доступ к репозиторию, для этого его нужно преобразовать так:
https://username:[email protected]/USERNAME/OTHERREPOSITORY.git
Измените текущий url в remote на указанный (как это сделать, описано ниже в ответе) и авторизация не будет запрашиваться.
Помните, что и в этом случае ваши данные будут храниться в открытом виде.
Существует возможность настроить netrc
SSH
Про работу с запароленным ключём SSH знаю лишь то, что можно настроить ssh-agent, который аналогично позволит не вводить каждый раз пароль от ключа ssh.
Для начала создайте ssh-ключ с помощью команды:
> ssh-keygen
Она попросит ввести имя файла (во многих случаях можно оставить имя по умолчанию) и пароль. Пароль при желании можно оставить пустым, для этого просто дважды нажмите Enter при запросе пароля (обычно рекомендуется устанавливать пароль).
По умолчанию пара ключей появляется в каталоге ~/.ssh/ . Вам нужно скопировать содержимое файла id_rsa.pub (если вы не задавали другое при создании ключа) и сохранить его в своём профиле на GitHub (Settings -> SSH Keys -> Add SSH key).
После этого можно перейти к настройке ssh-agent :
> echo $SSH_AGENT_PID
Если ssh-agent запущен, то должен вернуться его номер процесса. В этом случае можно пропустить следующий пункт и перейти к команде ssh-add .
Если вернулась пустая строка, необходимо запустить ssh-agent перед продолжением.
Запускаем ssh-agent в фоне:
> eval "$(ssh-agent -s)" # Agent pid 59566
Теперь осталось добавить сгенерированный ключ в ssh-agent :
> ssh-add ~/.ssh/id_rsa
Если вы настроите доступ по ssh к своему репозиторию с использованием ключа, то работу, вероятно, можно будет производить и из программ.
Для уже созданного репозитория можно изменить способ доступа, используя команду
> git remote set-url origin
где задаёт путь, в котором используется нужный протокол
Хранение и редактирование доступов от Git
При обращении к удалённому Git репозиторию требуется авторизация. Чтобы каждый раз не вводить пароль, его можно сохранить в менеджере учётных данных. Это не безопасное решение, но в некоторых случаях может применяться. Рассмотрим как это делается в Linux (Ubuntu) и Windows.
Хранение в Ubuntu
- Откройте терминал и введите команду:
git config --global credential.helper store
git pull
nano ~/.git-credentials

Пароль и логин записываются без шифрования, поэтому способ нельзя считать надёжным.
Хранение в Windows
В операционной системе Windows сохранение работает аналогичным образом, но безопасность хранения доступов чуть выше, так как за это отвечает встроенный диспетчер учетных данных. Находится он в панели управления.

Пароль здесь нельзя посмотреть или украсть. Разрешается только изменить на другой.
Как сохранить имя пользователя и пароль в Git?

Создайте ключ ssh Github. Перейдите в github.com -> Настройки -> ключи SSH и GPG -> Новый ключ SSH. Теперь сохраните свой закрытый ключ на вашем компьютере.
Затем, если закрытый ключ сохранен как id_rsa в каталоге ~/.ssh/, мы добавим его для аутентификации как таковой:
ssh-add -K ~/.ssh/id_rsa
Более Безопасный Метод: Кэширование
Мы можем использовать git-credential-store для кэширования нашего имени пользователя и пароля в течение определенного периода времени. Просто введите следующее в CLI (terminal или в командной строке):
git config --global credential.helper cache
Вы также можете установить период ожидания (в секундах) как таковой:
git config --global credential.helper 'cache --timeout=3600'
Еще Менее Безопасный Метод
Git-credential-store также может использоваться, но сохраняет пароли в обычном текстовом файле на вашем диске как таковом:
git config credential.helper store
Устаревший ответ – Быстрый и небезопасный
Это небезопасный способ хранения пароля в виде обычного текста. Если кто-то получит контроль над вашим компьютером, ваш пароль будет раскрыт!
Вы можете установить свое имя пользователя и пароль следующим образом:
git config --global user.name "your username" git config --global user.password "your password"
Как сохранить логин и пароль для доступа в git репозиторий

При работе с закрытыми git репозиториями приходится каждый раз вводить логин и пароль при подключении по SSH. Это связано с тем, что Git не кеширует пользовательские данные. Решить эту проблему можно двумя способами:
- создать ssh ключ и добавить его в профиль git платформы
- сохранить логин и пароль
В это статье рассмотрим второй вариант.
Важно понимать, что логин и пароль будут сохранены в текстовом файле в открытом виде. Этот файл можно открыть текстовым редактором и увидеть все пользовательские данные, поэтому способ не самый безопасный. Тем не менее, если вы работаете один за своим компьютером, то способ вполне рабочий.
Существует два метода хранения пароля:
- cache режим хранит пароль в памяти определенное время (конечный срок)
- store режим сохраняет пароль на постоянной основе
Чтобы сохранять логин и пароль в режиме «cache», используйте команду:
git config --global credential.helper cache --timeout 3600
- git config — команда для настройки
- —global — указываем, что будет настраивать глобально, а не для репозитория
- credential.helper cache — указываем режим хранения данных «cache»
- —timeout — как долго будет хранится пароль (в секундах)
Чтобы сохранять пользовательские данные навсегда, воспользуйтесь командой:
git config --global credential.helper store
- git config — команда для настройки
- —global — указываем, что будет настраивать глобально, а не для репозитория
- credential.helper store — указываем режим хранения данных «store»
По умолчанию пользовательские данные хранятся в файле домашнего каталога пользователя ~/.git-credentials
После выполнения команды нужно ввести логин и пароль (например сделать git pull) и в следующий раз данные для входа не будут запрашиваться.