Недавно я переключился на синхронизацию своих репозиториев с https: // на GitHub (из-за проблем с брандмауэром), и он каждый раз запрашивает пароль.
Есть ли способ кэшировать учетные данные вместо аутентификации каждый раз git push
?
git
authentication
github
git-push
git-config
Zepplock
источник
источник
_netrc
файла, содержащего ваши учетные данные. Смотрите мой ответ ниже . Я обнаружил, что безопаснее, чемgit-credential-winstore.exe
(кэш памяти), который немного глючит в Windows.git-credential-winstore
работал лучше всего для Windows. Что глючит? Настройка ssh является предпочтительным вариантом, хотя я делал это несколько раз, он более подвержен ошибкам, а иногда просто не работает, когда вам нужно подключиться к нескольким хостам.Ответы:
С Git версии 1.7.9 и выше
Начиная с Git 1.7.9 (выпущенной в конце января 2012 года), в Git существует изящный механизм, позволяющий избежать необходимости постоянно вводить пароль для HTTP / HTTPS, называемый помощниками по учетным данным . (Благодаря Дазонику за указание на эту новую функцию в комментариях ниже.)
С Git 1.7.9 или новее вы можете просто использовать один из следующих помощников по учетным данным:
... который говорит Git хранить ваш пароль в кеше (по умолчанию) в течение 15 минут. Вы можете установить более длительное время ожидания с помощью:
(Этот пример был предложен в странице справки GitHub для Linux .) При желании вы также можете хранить свои учетные данные постоянно, см. Другие ответы ниже.
Помощь GitHub также предполагает, что если вы используете Mac OS X и используете Homebrew для установки Git, вы можете использовать встроенное хранилище ключей Mac OS X с:
Для Windows существует помощник Git Credential Manager для Windows или wincred в msysgit .
С Git для Windows 2.7.3+ (март 2016 г.):
Для Linux вы можете использовать
gnome-keyring
(или другую реализацию ключей, такую как KWallet).С версиями Git до 1.7.9
В версиях Git до 1.7.9 эта более безопасная опция недоступна, и вам потребуется изменить URL-адрес,
origin
используемый вашим пультом, чтобы включить пароль следующим образом:... другими словами,
:password
после имени пользователя и до@
.Вы можете установить новый URL для вашего
origin
пульта с помощью:Убедитесь, что вы используете
https
, и вы должны знать, что если вы сделаете это, ваш пароль GitHub будет храниться в виде открытого текста в вашем.git
каталоге, что, очевидно, нежелательно.С любой версией Git (ну, начиная с версии 0.99)
Альтернативный подход заключается в том, чтобы ввести свое имя пользователя и пароль в
~/.netrc
файл, хотя, как и в случае с сохранением пароля в удаленном URL-адресе, это означает, что ваш пароль будет храниться на диске в виде простого текста и, следовательно, будет менее безопасным и не рекомендуется. Однако, если вы хотите использовать этот подход, добавьте следующую строку в ваш~/.netrc
:... заменить
<hostname>
на имя хоста сервера,<username>
а также<password>
на ваше имя пользователя и пароль. Также не забудьте установить ограничительные разрешения файловой системы для этого файла:Обратите внимание, что в Windows этот файл должен вызываться
_netrc
, и вам может потребоваться определить переменную среды% HOME% - для получения дополнительной информации см .:источник
git config --global credential.helper osxkeychain
на OS X. Для других ОС см. help.github.com/articles/set-up-githttps://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git
. Это делает обычные текстовые пароли, хранящиеся на диске, практически безопасными для использования.git config --global credential.helper cache
не работает на Windows: stackoverflow.com/questions/11693074/… используйте gitcredentialstore на Windows и будьте счастливыВы также можете сделать так, чтобы Git постоянно сохранял ваши учетные данные, используя следующее:
Примечание. Хотя это удобно, Git будет хранить ваши учетные данные в виде открытого текста в локальном файле (.git-credentials) в каталоге вашего проекта (см. Ниже каталог «home»). Если вам это не нравится, удалите этот файл и переключитесь на использование опции кеша.
Если вы хотите, чтобы Git продолжал запрашивать учетные данные каждый раз, когда ему нужно подключиться к удаленному репозиторию, вы можете запустить эту команду:
Чтобы хранить пароли в
.git-credentials
вашем%HOME%
каталоге, а не в каталоге проекта: используйте--global
флагисточник
git config --global credential.helper store
--global
флаг был избыточным. Даже без этого флага файл учетных данных был создан в%USER_HOME%
каталоге.TLDR; Используйте зашифрованный файл netrc с Git 1.8.3+ .
Сохранение пароля для URL-адреса HTTPS хранилища Git возможно с помощью
~/.netrc
(Unix) или%HOME%/_netrc
(обратите внимание_
) в Windows.Но : этот файл будет хранить ваш пароль в виде простого текста.
Решение : шифровать этот файл с помощью GPG (GNU Privacy Guard) , и сделать Git расшифровать его каждый раз , когда он нуждается пароль (для
push
/pull
/fetch
/clone
операции).Примечание: с Git 2.18 (Q2 2018) вы теперь можете настроить GPG, используемый для расшифровки зашифрованного
.netrc
файла.Смотрите коммит 786ef50 , коммит f07eeed (12 мая 2018 г.) Луиса Марсано (``) .
(Слито Junio C Hamano -
gitster
- в фиксации 017b7c5 , 30 мая 2018 года)Пошаговые инструкции для Windows
С Windows:
(Git имеет
gpg.exe
в своем дистрибутиве, но использование полной установки GPG включает в себяgpg-agent.exe
, который запоминает вашу фразу-пароль, связанную с вашим ключом GPG.)Установите
gpg4Win Lite
минимальный интерфейс командной строки gnupg (возьмите самый последнийgpg4win-vanilla-2.X.Y-betaZZ.exe
) и заполните PATH установочным каталогом GPG:(Обратите внимание на команду '
copy
': Git понадобится скрипт Bash для выполнения команды 'gpg
'. Поскольку онgpg4win-vanilla-2
поставляетсяgpg2.exe
, вам нужно продублировать его.)Создайте или импортируйте ключ GPG и доверяйте ему:
(Удостоверьтесь, чтобы поставить ключевую фразу к этому ключу.)
Доверься этому ключу
Установите вспомогательный сценарий учетных данных в каталоге внутри вашего
%PATH%
:(Осторожно: скрипт переименован в Git 2.25.x / 2.26, см. Ниже)
(Да, это скрипт Bash, но он будет работать в Windows, так как он будет вызываться Git.)
Сделайте файл _netrc открытым текстом
(Не забывайте '
protocol
' part: 'http
' или 'https
' в зависимости от того, какой URL вы будете использовать.)Зашифруйте этот файл:
(Теперь можно удалить в
_netrc
файл, сохраняя только_netrc.gpg
зашифрованный один.)Используйте этот зашифрованный файл:
(Обратите внимание на '
/
':C:\path\to...
вообще не будет работать.) (Вы можете сначала использовать,-v -d
чтобы увидеть, что происходит.)С этого
_netrc.gpg
момента любая команда Git, использующая URL-адрес HTTP (S), который требует аутентификации, будет расшифровывать этот файл и использовать логин / пароль, связанный с сервером, с которым вы связываетесь. В первый раз, GPG попросит вас ввести пароль вашего ключа GPG, чтобы расшифровать файл. В других случаях gpg-agent, автоматически запускаемый при первом вызове GPG, предоставит вам эту фразу-пароль.Таким образом, вы можете запомнить несколько URL / логинов / паролей в одном файле и хранить их на своем диске в зашифрованном виде.
Я нахожу это более удобным, чем «помощник по кешированию», где вам нужно запомнить и ввести (один раз за сеанс) разные пароли для каждой из ваших удаленных служб, чтобы указанный пароль кэшировался в памяти.
В Git 2.26 (Q1 2020) пример помощника по
.netrc
учетным данным для использования был обновлен для работы из коробки. Смотрите патч / обсуждение .См. Коммит 6579d93 , коммит 1c78c78 (20 декабря 2019 г.) от Denton Liu (
Denton-L
) .(Слиты Junio C Hamano -
gitster
- в фиксации 1fd27f8 , 25 дек 2019)А также:
В версии 2.26 (первый квартал 2020 года) обновлен пример помощника по учетным данным для использования .netrc.
См. Коммит 6579d93 , коммит 1c78c78 (20 декабря 2019 г.) от Denton Liu (
Denton-L
) .(Слиты Junio C Hamano -
gitster
- в фиксации 1fd27f8 , 25 дек 2019)Джефф Кинг (
peff
) добавляет:источник
curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc
: вам нужно скопироватьgit-credential-netrc
любое место в вашем пути ($PATH
), чтобы git мог вызывать 'credential-netrc
'._netrc
меня не работает наWindows 7
ПК, но.netrc
работает для youtube-dl с--netrc
аргументом, переданным ему.https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(по прошествии семи лет 😉)Существует простой старомодный способ хранения учетных данных пользователя в URL-адресе HTTPS:
Вы можете изменить URL с помощью
git remote set-url <remote-repo> <URL>
Очевидным недостатком этого подхода является то, что вы должны хранить пароль в виде простого текста. Вы все еще можете просто ввести имя пользователя (
https://user@github.com/...
), которое, по крайней мере, сэкономит вам половину хлопот.Вы можете предпочесть перейти на SSH или использовать клиентское программное обеспечение GitHub.
источник
Используйте хранилище учетных данных.
Для Git 2.11+ на OS X и Linux , использование Git встроенный в верительном магазине :
Для msysgit 1.7.9+ в Windows :
Для Git 1.7.9+ на OS X используйте:
источник
git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( подробнее здесь ). Вы должны всегда использовать личный токен доступа и, конечно, использовать 2FA в своей учетной записи GitHub.Вы можете просто использовать
Когда вы в следующий раз введете пароль с помощью команды pull или push, он будет сохранен в файле .git-credentials в виде простого текста (немного небезопасно, но просто помещается в защищенную папку).
И это все, как указано на этой странице:
git-credential-store
источник
git config credential.helper manager
вместо этогоДля меня не сразу было очевидно, что мне нужно сначала скачать помощника! Я нашел загрузку credential.helper в Atlassian's Постоянная аутентификация в репозиториях Git .
Quote:
Выполните следующие действия, если вы хотите использовать Git с кэшированием учетных данных в OS X:
Загрузите двоичный файл git-credential-osxkeychain.
Запустите команду ниже, чтобы убедиться, что двоичный файл является исполняемым:
Поместите это в каталог
/usr/local/bin
.Запустите команду ниже:
источник
Просто включите регистрационные данные как часть URL:
Примечание: я не рекомендую этот метод, но если вы в спешке и больше ничего не работает, вы можете использовать этот метод.
источник
На установке GNU / Linux ~ / .netrc тоже работает довольно хорошо:
Это может зависеть от того, какие сетевые библиотеки Git использует для транспорта HTTPS .
источник
chmod 0600 ~/.netrc
.Для Windows вы можете использовать плагин Git Credential Manager (GCM). В настоящее время поддерживается Microsoft. Приятно то, что он сохраняет пароль в хранилище учетных данных Windows, а не в виде простого текста.
На странице релизов проекта есть установщик . Это также установит официальную версию Git для Windows со встроенным менеджером учетных данных. Это позволяет двухфакторной аутентификации для GitHub (и других серверов). И имеет графический интерфейс для первоначального входа в систему.
Для пользователей Cygwin (или пользователей, уже использующих официальный Git для Windows), вы можете предпочесть установку вручную. Загрузите пакет zip со страницы релизов . Распакуйте пакет и запустите
install.cmd
файл. Это установит в вашу~/bin
папку. (Убедитесь, что ваш~/bin
каталог находится в вашем PATH.) Затем вы настраиваете его с помощью этой команды:Git будет запускать
git-credential-manager.exe
при аутентификации на любом сервере.источник
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( подробнее здесь ). Вы должны всегда использовать личный токен доступа и, конечно, использовать 2FA в своей учетной записи GitHub.Если вы не хотите хранить свой пароль в незашифрованном виде, как сказал Марк, вы можете использовать другой URL-адрес GitHub для извлечения, чем для отправки. В вашем конфигурационном файле под
[remote "origin"]
:Он по-прежнему будет запрашивать пароль при нажатии, но не при получении, по крайней мере, для проектов с открытым исходным кодом.
источник
OAuth
Вы можете создать свой собственный персональный токен API ( OAuth ) и использовать его так же, как и обычные учетные данные (at:)
/settings/tokens
. Например:.netrc
Другой способ заключается в настройке вашего пользователя / пароля в
~/.netrc
(_netrc
в Windows), напримерДля HTTPS добавьте дополнительную строку:
Помощник по учету
Чтобы кэшировать свой пароль GitHub в Git при использовании HTTPS, вы можете использовать помощник по учетным данным, чтобы Git запоминал имя пользователя и пароль GitHub при каждом обращении к GitHub.
git config --global credential.helper osxkeychain
(osxkeychain helper
обязательно),git config --global credential.helper wincred
git config --global credential.helper cache
Связанные с:
источник
Вы можете использовать учетные данные помощников.
где
x
количество секунд.источник
store
,cache
и другие общие вещи , которые перечислены и объяснены?После того, как вы клонировали репозиторий
repo
, вы можете отредактироватьrepo/.git/config
и добавить некоторые настройки, как показано ниже:Тогда вас не попросят
username
иpassword
снова.источник
helper = manager
(но меня просят имя пользователя + репо для первого нажатия).Я знаю, что это не безопасное решение, но иногда вам нужно просто простое решение - без установки чего-либо еще. И поскольку helper = store у меня не работает, я создал вспомогательный помощник:
Создайте сценарий и поместите его в папку bin вашего пользователя, здесь с именем credfake , этот сценарий предоставит ваше имя пользователя и ваш пароль:
сделать его исполняемым:
затем настройте его в git:
(или используйте его без --global только для одного репо)
и - voilá - git будет использовать этот пользователь + пароль.
источник
Вместо пароля учетной записи следует использовать токен аутентификации. Перейдите в настройки / приложения GitHub и создайте личный токен доступа. Токен можно использовать так же, как пароль.
Маркер предназначен для того, чтобы пользователи не могли использовать пароль учетной записи для работы над проектом. Используйте пароль только при выполнении административной работы, например, при создании новых токенов или отзыве старых токенов.
Вместо токена или пароля, который предоставляет пользователю полный доступ к учетной записи GitHub, можно использовать специальный ключ развертывания проекта для предоставления доступа к одному репозиторию проекта. Проект Git можно настроить на использование этого другого ключа в следующих шагах, когда вы все еще можете получить доступ к другим учетным записям или проектам Git с обычными учетными данными:
Host
,IdentityFile
для ключа развертывания, может бытьUserKnownHostsFile
, и , возможно,User
(хотя я думаю , что вам это не нужно).ssh -F /path/to/your/config $*
GIT_SSH=/path/to/your/wrapper
перед вашей обычной командой Git. Здесьgit remote
(источник) должен использоватьgit@github.com:user/project.git
формат.источник
Для безопасности лучше использовать учетные данные, но вы можете хранить их некоторое время, используя кеш:
Ваши учетные данные будут сохранены в течение 3600 секунд.
источник
--timeout
и учетные данные будут храниться вечно.windowsservercore
)?Ситуация немного отличается, если вы используете двухфакторную аутентификацию как и я. Поскольку я не нашел хорошего ответа в другом месте, я его воткну, чтобы, возможно, я смог найти его позже.
Если вы используете двухфакторную аутентификацию, то указание имени пользователя и пароля даже не будет работать - вам будет отказано в доступе. Но вы можете использовать токен доступа к приложению и использовать помощник по учетным данным Git для его кеширования. Вот соответствующие ссылки:
И я не помню, где я видел это, но когда вас спрашивают, какое у вас имя пользователя - вот где вы прикрепляете токен доступа к приложению. Затем оставьте пароль пустым. Это сработало на моем Mac.
источник
Это работает для меня, я использую Windows 10
источник
Обычно у вас есть удаленный URL, что-то вроде этого,
Если вы хотите пропустить имя пользователя и пароль во время использования
git push
, попробуйте это:Я только что добавил тот же URL (с данными пользователя, включая пароль) к источнику.
ПРИМЕЧАНИЕ. Не работает, если имя пользователя является идентификатором электронной почты.
источник
Я получил ответ от gitcredentials (7) Страница руководства . В моем случае в моей установке Windows нет кэша учетных данных; Я пользуюсь credential-store.
После использования хранилища учетных данных имя пользователя / пароль сохраняются в файле [папка пользователя] /. Git-credentials. Чтобы удалить имя пользователя / пароль, просто удалите содержимое файла.
источник
git config --global credential.helper wincred
этот магазин для хранения пароля постоянно.В документации композитора упоминается, что вы можете запретить ему использовать API GitHub, чтобы он действовал следующим образом
git clone
:Таким образом, раздел будет выглядеть так:
Имейте в виду, что API существует по причине. Так что это должен быть последний метод в отношении увеличения нагрузки на github.com.
источник
Вы также редактируете файл bashrc и добавляете в него скрипт.
Это будет запрашивать ваш пароль один раз при запуске Git, а затем запоминает его, пока вы не выйдете из системы.
источник
Если вы используете
osxkeychain
токен с истекшим сроком действия и хотите обновить его, выполните следующие действия:Запустите в терминале, затем нажмите Enter дважды.
Теперь вам будет предложено ввести имя пользователя / пароль. Однако иногда кажется, что это не «берет», и вы должны продолжать входить снова.
Если это так, перезагрузите компьютер . Теперь, когда вы в следующий раз запустите команду git и введете свое имя пользователя / пароль, она будет сохранена.
источник