Git как запомнить логин пароль
Перейти к содержимому

Git как запомнить логин пароль

  • автор:

Почему Git всегда запрашивает пароль?

Если Git запрашивает имя пользователя и пароль при каждой попытке взаимодействия с GitHub, вероятно, вы используете URL-адрес клонирования HTTPS для репозитория.

Using an HTTPS remote URL has some advantages compared with using SSH. It’s easier to set up than SSH, and usually works through strict firewalls and proxies. However, it also prompts you to enter your GitHub credentials every time you pull or push a repository.

When Git prompts you for your password, enter your personal access token. Alternatively, you can use a credential helper like Git Credential Manager. Password-based authentication for Git has been removed in favor of more secure authentication methods. For more information, see «Managing your personal access tokens.»

You can avoid being prompted for your password by configuring Git to cache your credentials for you. Once you’ve configured credential caching, Git automatically uses your cached personal access token when you pull or push a repository using HTTPS.

Further reading

  • «About remote repositories.»
  • «About authentication to GitHub»
  • «Generating a new SSH key and adding it to the ssh-agent»

Обновление репозитория git без ввода паролей

Есть корпоративный аккаунт «А» с приватными репозиториями на github.com;
есть аккаунт «B» — мой обычный аккаунт, который имеет административный доступ к репозиториям аккаунта «А». При обновлении репозитория на сервере через консоль командой git pull система каждый раз запрашивает пароль. Ввожу пароль аккаунта «В» и команда успешно выполняетя. Вопрос: как сделать так, чтобы при вводе команды из консоли, система не запрашивала пароль? Это должно позволить выполнять обновление репозитория из php. Что для этого нужно, размещать какой-то специальный ключ на сервере?

Отслеживать
34k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
задан 29 апр 2015 в 12:41
1,152 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 репозиторий

Drupeople.ru

При работе с закрытыми 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) и в следующий раз данные для входа не будут запрашиваться.

Как пушить на github чтобы не вводить каждый раз логин и пароль?

Amelinium

Кстати, пароль можно и поменять:
$ ssh-keygen -p # Введете старый, а потом новый.

Консоль выведет следующее:

# Your identification has been saved in /Users/you/.ssh/id_rsa. # Your public key has been saved in /Users/you/.ssh/id_rsa.pub. # The key fingerprint is: # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

Теперь надо добавить ваши ключи в ssh-агент
Удостоверьтесь в том, что он у вас есть — запустите
$ ssh-agent -s

Должен быть следующий однострочный (!) вывод, номер pid будет другим, все остальное от лукавого:
Agent pid 59566

Если нет, то скорее всего в терминале другая оболочка, тогда:

$ eval $(ssh-agent -s) Agent pid 59566

Вот теперь можно добавить ключи в ssh-агент
$ ssh-add ~/.ssh/id_rsa

Далее, добавим ключи в VCS-сервисы github и bitbucket, для этого скопируйте содержимое id_rsa.pub, и вставьте в настройках своего аккаунта на VCS (например, «SSH and GPG keys» для Github). Активируем ключи.

для github:
$ ssh -T git@github.com

чуть длинней, для bitbucket, вначале надо создать файл-конфиг, ~/.ssh/config, куда добавить следующие строки:

Host bitbucket.org IdentityFile ~/.ssh/id_rsa # Тут приватный ключ!

После чего запустить следующую команду:
$ ssh -T git@bitbucket.org

В каждом случае, если все пройдет успешно, то вы получите следующие сообщения:

Hi #! You've successfully authenticated, but GitHub does not provide shell access.
conq: logged in as tutorials. You can use git or hg to connect to Bitbucket. Shell access is disabled.

К слову, что Github, что Bitbucket выдали мне в этот раз такое:

Thу authenticity of host 'github.com (192.30.253.113)' can't be established. RSA key fingerprint is 12:12:12. 12. Are you sure want to conecting (yes/no)?

Ответил yes, консоль что-то ответила и все работает.

Если же вы используете алиасы для хостов, то и активация должна быть через алиас:

Если работаете с Sourcetree (рекомендую для винды), то есть такой момент, что программа не принимает стандартный формат этих ключей и что бы работать с программой через ssh придется из полученного ключа (приватный) сгенерировать их в другом формате понятном putty. Для этого используется программа puttygen. Которая входит в поставку Sourcetree.

Занудно, но уже финал близок, далее нам нужно настроить ~/.bashrc, которого на винде нет, именно он будет содержать инициализационные настройки для консоли и запускать ssh-агент, который будет включать ваши ключи, запоминать сессию:

# Note: ~/.ssh/environment should not be used, as it # already has a different purpose in SSH. env=~/.ssh/agent.env # Note: Don't bother checking SSH_AGENT_PID. It's not used # by SSH itself, and it might even be incorrect # (for example, when using agent-forwarding over SSH). agent_is_running() < if [ "$SSH_AUTH_SOCK" ]; then # ssh-add returns: # 0 = agent running, has keys # 1 = agent running, no keys # 2 = agent not running ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ] else false fi > agent_has_keys() < ssh-add -l >/dev/null 2>&1 > agent_load_env() < . "$env" >/dev/null > agent_start() < (umask 077; ssh-agent >"$env") . "$env" >/dev/null > if ! agent_is_running; then agent_load_env fi # if your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need # to paste the proper path after ssh-add if ! agent_is_running; then agent_start ssh-add elif ! agent_has_keys; then ssh-add fi unset env

И снова не финал, скорее всего так как вы не пользовались SSH, то ваши уже существующие локальные репо будут работать по http/https, поэтому надо сменить адреса. Адреса удаленных репозиториев проверяются командой $ git remote -v . Для смены адресов git есть специальная команда: $ set-url , ввести следующее:

$ git remote set-url origin git@github.com:USERNAME/OTHERREPOSITORY.git

Вернуть все на Родину можно аналогично

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *