Есть корпоративный аккаунт "А" с приватными репозиториями на github.com есть аккаунт "B" - мой обычный аккаунт, который имеет административный доступ к репозиториям аккаунта "А". При обновлении репозитория на сервере через консоль командой git pull система каждый раз запрашивает пароль. Ввожу пароль аккаунта "В" и команда успешно выполняетя. Вопрос: как сделать так, чтобы при вводе команды из консоли, система не запрашивала пароль? Это должно позволить выполнять обновление репозитория из php. Что для этого нужно, размещать какой-то специальный ключ на сервере?
Ответ Запустите в консоли команду 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 Для версий Git, ниже 1.7.10 Вы можете указать информацию для авторизации в url, по которому осуществляете доступ к репозиторию, для этого его нужно преобразовать так: https://username:[email protected]/USERNAME/OTHERREPOSITORY.git Измените текущий url в remote на указанный (как это сделать, описано ниже в ответе) и авторизация не будет запрашиваться. Помните, что и в этом случае ваши данные будут храниться в открытом виде. Для Git версии не ниже 0.99 Существует возможность настроить 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 где задаёт путь, в котором используется нужный протокол