Как сохранить имя пользователя и пароль в git [GitExtension]?


1246

Я хочу использовать push и pull автоматически в GitExtension , не вводя каждый раз мой пароль и пароль.

Так как я могу сохранить свои учетные данные в git?


1
Вы также можете
Антон Тарасенко


1
@AntonTarasenko мой gitconfig ничего не говорит о Proxy, только [user] email = email@dummy.com name = uname [учетные данные] helper = store
gc7__

Ответы:


2216

Запустить

git config --global credential.helper store

тогда

git pull

укажите имя пользователя и пароль, и эти подробности будут запомнены позже. Учетные данные хранятся в файле на диске с правами доступа «только для чтения / записи», но в открытом виде.

Если вы хотите изменить пароль позже

git pull

Не удастся, потому что пароль неверный, git затем удалит из ~/.git-credentialsфайла пользователя + пароль, вызвавший оскорбления , поэтому теперь перезапустите

git pull

предоставить новый пароль, чтобы он работал как раньше.


6
как важен флаг -u для изменения пароля позже?
lucidbrot

8
для Debian / Ubuntu использовать libsecret stackoverflow.com/questions/36585496/...
rofrol

3
@lucidbrot извините за поздний ответ. git pull -u не работает с последней версией. Я обновил ответ. Надеюсь, это ответит на ваш вопрос.
Neetika

51
Обратите внимание, что при этом ваше имя пользователя и пароль будут храниться в текстовом файле по адресу ~ / .git-credentials. Любой может открыть и прочитать это.
RoboAlex

12
Это не работает Это не может тянуть.
Urasquirrel

350

Вы можете использовать git configдля включения хранилища учетных данных в git.

git config --global credential.helper store

При запуске этой команды при первом извлечении или удалении из удаленного репозитория вам будет задан вопрос об имени пользователя и пароле.

После этого для последовательной связи с удаленным репозиторием вам не нужно указывать имя пользователя и пароль.

Формат хранения - это .git-credentialsфайл, хранящийся в виде открытого текста.

Также вы можете использовать другие помощники для git config credential.helper, а именно кеш памяти:

git config credential.helper cache <timeout>

Это необязательный параметр timeout parameter, определяющий, как долго учетные данные будут храниться в памяти. С помощью помощника учетные данные никогда не коснутся диска и будут удалены после указанного времени ожидания. defaultЗначение900 seconds (15 minutes).


ВНИМАНИЕ : Если вы используете этот метод, пароли вашей учетной записи git будут сохранены в plaintextформате global .gitconfig file, например, в Linux/home/[username]/.gitconfig

Если это нежелательно для вас, используйте ssh keyвместо этого для своих учетных записей.


3
Жаль, что вы показали файл .gitconfig - первая команда была перезаписана второй :(
Адам

3
Для git config credential.helper cacheпаролей не будут сохранены в файл, только хранятся в памяти. См. Git-scm.com/docs/git-credential-cache
SA

1
Не работает. Дает фатальный исход: аутентификация не удалась. Даже не спрашивает пароль.
Филипп Рего

2
Точно так же, как дополнение - ваш личный ssh-ключ также будет храниться в виде открытого текста в доступном для пользователя месте, так что, по сути, одна и та же поверхность атаки в обоих случаях.
Falco

Как я могу использовать это для Gitlab
Anil

172

Рекомендуемый и безопасный метод: SSH

Создайте ключ ssh Github. Перейдите на github.com -> Настройки -> Ключи SSH и GPG -> Новый ключ SSH. Теперь сохраните свой закрытый ключ на свой компьютер.

Затем, если закрытый ключ сохранен как id_rsa в каталоге ~ / .ssh / , мы добавим его для аутентификации как таковой:

ssh-add -K ~/.ssh/id_rsa


Более безопасный метод: кэширование

Мы можем использовать git-credential-store для кэширования нашего имени пользователя и пароля на определенный период времени. Просто введите следующее в свой CLI (терминал или командная строка):

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"

16
Это не сработало для меня, git clone по-прежнему запрашивает имя пользователя и пароль
Оливер

11
я не рекомендую хранить ваш пароль, как это, потому что "git config --global -l" покажет ваш пароль на консоли
CCC

1
Это не работает для меня. Странно, что это должно работать для всех, так как в спецификации gitconfig нет места для «пароля»
Хэмиш Тодд

Файл .gitconfig - это другой файл: .git-credentials, находящийся в вашей домашней папке, содержит URL-адрес для репозитория с вашим именем пользователя и паролем в URL, как git: // username: password @ server / git / repo. Будьте осторожны, ЭТО СОХРАНЕНО ТЕКСТ ПАРОЛЬ. Используйте «git config --global credential.helper cache», если вы не можете использовать ssh-ключи.
скаббит

Когда я попытался вручную добавить имя пользователя и пароль, файл конфигурации сломался, и мне пришлось снова клонировать репозиторий. Не пытайтесь это ..
Летие Техера

102

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

В Терминале введите следующее:

# Set git to use the credential memory cache
git config --global credential.helper cache

По умолчанию Git кеширует ваш пароль в течение 15 минут.

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

# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'

Из справки GitHub


7
Вы единственный, кто предложил глобальную версию, которая ВАЖНА, потому что она разрушалась для меня каждый раз, когда я клонировал репо
Xerus

4
Как установить время ожидания до бесконечности? Я никогда не хочу вводить свой пароль снова.
Avamander

8
@Avamander просто замените cacheчасть на store. Таким образом, полная команда будет: git config --global credential.helper store. Обратите внимание, что при этом Ваш пароль будет храниться в открытом текстовом файле (так сказать, без какого-либо шифрования).
Александар

2
@Casper Это не работает с более чем одной учетной записью, пароль не выбирается из хранилища на основе электронной почты, как это должно быть, вместо этого берется первый в списке.
Avamander

2
@Avamander хм .. это должно быть так или это ошибка? Какое максимальное значение для --timeoutпараметра?
Александр

50

Вы можете редактировать ~/.gitconfigфайл для хранения ваших учетных данных

sudo nano ~/.gitconfig

Который уже должен иметь

[user]
        email = your@email.com
        user = gitUSER

Вы должны добавить внизу этого файла.

[credential]
        helper = store

Причина, по которой я рекомендую эту опцию, заключается в том, что она носит глобальный характер, и если в какой-то момент вам нужно удалить опцию, вы знаете, куда идти и изменить ее.

ИСПОЛЬЗУЙТЕ ЭТОТ ВАРИАНТ ТОЛЬКО В ВАШЕМ ЛИЧНОМ КОМПЬЮТЕРЕ.

Тогда, когда вы тянете | клон | введите ваш пароль git, в общем, пароль будет сохранен в ~/.git-credentialsформате

https://GITUSER:GITPASSWORD@DOMAIN.XXX

ГДЕ DOMAIN.XXX МОЖЕТ БЫТЬ GITHUB.COM | BITBUCKET.ORG | ДРУГОЙ

См документы

Перезапустите свой терминал.


1
Не забудьте перезапустить окно git bash. Только когда я это сделал, это сработало для меня.
sofs1

34

Просто поместите свои учетные данные в URL-адрес следующим образом:

https://Username: Password@github.com/myRepoDir/myRepo.git

Вы можете хранить это так:

git remote add myrepo https://Userna...

... пример его использования :

git push myrepo master


Теперь, чтобы Перечислить URL , псевдонимы:

git remote -v

... и что команда удалить один из них:

git remote rm myrepo


8
Вы также можете оставить свой пароль вне URL, чтобы Git запросил ваш пароль, но не ваше имя пользователя.
кенгуру

Использовать SSH вместо HTTP намного проще и безопаснее. Таким образом, вы можете хранить свой пароль Git в секрете и использовать только свой SSH-ключ. Информация о SSH на Git: help.github.com/en/enterprise/2.16/user/... git@github.com:Username/myRepo.git
Лойх

Наличие вашего пароля в URL сохранит его в истории вашего терминала, поэтому этот способ не очень безопасен.
Джош Коррейя

Обратите внимание, что вики может в настоящее время только клонироваться https, но sshрешение, подобное этому, может быть полезным там. Также обратите внимание, что вы можете использовать oauth-токен, который немного более безопасен, чем ваш пароль GitHub.
АстроФлойд

31

Для глобальной настройки откройте терминал (из любого места) и выполните следующее:

  git config --global user.name "your username"
  git config --global user.password "your password"

Таким образом, любая локальная версия git-репо, имеющаяся на вашем компьютере, будет использовать эту информацию.

Вы можете индивидуально настроить для каждого репо, выполнив:

  • открыть терминал в папке репо.
  • запустите следующее:

    git config user.name "your username"
    git config user.password "your password"
    

Это влияет только на эту папку (потому что ваша конфигурация является локальной).


8
Не опасно ли иметь такие учетные данные в простом конфигурационном файле, доступном для просмотра кем-либо?
bool3max

1
Ваш вопрос должен быть для другой темы. Здесь мы поговорим о том, как настроить имя и пароль для git глобально и локально.
Tuananhcwrs

Спасибо за вклад, приятель
bool3max

11
Я просто хотел бы добавить, что вопрос о возможных проблемах безопасности ответа имеет место здесь, поскольку он напрямую влияет на его качество и, возможно, тысячи пользователей, реализующих его.
Майкл Каргл

2
не работает для меня, добавил --localтег, но опять ничего не происходит
PayamBeirami

23

Вы можете использовать git-credential-store для хранения незашифрованных паролей на диске, защищенных только разрешениями файловой системы.

пример

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]

Вы можете проверить учетные данные, хранящиеся в файле ~/.git-credentials

Для получения дополнительной информации посетите git-credential-store - Помощник для хранения учетных данных на диске


17

Вы будете более защищены, если будете использовать аутентификацию SSH, чем аутентификация по имени пользователя / паролю.

Если вы используете Mac, аутентификация клиента SSH интегрирована в связку ключей MacOS. Создав ключ SSH, введите в свой терминал:

ssh-add -K ~/.ssh/id_rsa

Это добавит закрытый ключ SSH в цепочку ключей MacOS. Клиент git будет использовать ssh при подключении к удаленному серверу. Пока вы зарегистрируете свой открытый ключ ssh на сервере, все будет в порядке.


1
должно быть к не к?
dez93_2000

1
К вашему сведению: я работаю на Mac. Сказав это, из информации "man": "-k" При загрузке ключей или удалении ключей из агента обрабатывайте только простые личные ключи и пропускайте сертификаты. «-K» При добавлении идентификаторов каждая фраза-пароль также будет храниться в цепочке для ключей пользователя. При удалении идентификаторов с помощью -d каждая фраза-пароль будет удалена из него.
Birol Efe

3
Я не думаю, что это работает для репозиториев на основе https.
zakmck

5
Этот ответ, кажется, путает пароли (репозитории HTTPS) с закрытыми ключами SSH.
Стив Беннетт

2
Я не согласен. Вы не можете быть более безопасным, предоставляя доступ к хосту SSH. Используя HTTP-аутентификацию, тот, кто украл учетные данные, будет иметь доступ только к GitHub/GitLab. Также токены предназначены для ограниченной жизни.
Дмитрий Коприва

16

Изучив десятки SO-сообщений, блогов и т. Д., Я опробовал каждый метод, и это то, что я придумал. Это охватывает ВСЕ.

The Vanilla DevOps Git Учетные данные и частные пакеты

Это все способы и инструменты, с помощью которых вы можете безопасно аутентифицировать git для клонирования репозитория без интерактивного запроса пароля .

  • Открытые ключи SSH
    • SSH_ASKPASS
  • Токены доступа к API
    • GIT_ASKPASS
    • .gitconfig вместо
    • .gitconfig [учетные данные]
    • .git-учетные
    • .netrc
  • Частные пакеты (бесплатно)
    • node / npm package.json
    • python / pip / eggs needs.txt
    • рубиновые камни Gemfile
    • Голанг go.mod

Серебряная пуля

Хотите Just Works ™? Это волшебная серебряная пуля.

Получите свой токен доступа (см. Раздел в чит-листе, если вам нужны инструкции Github или Gitea) и установите его в переменной окружения (как для локального разработчика, так и для развертывания):

MY_GIT_TOKEN=xxxxxxxxxxxxxxxx

Для Github скопируйте и запустите эти строки дословно :

git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"

Поздравляю, теперь любому автоматизированному инструменту клонирования git-репозиториев не будет препятствовать приглашение пароля, будь то использование https или любой другой стиль ssh url.

Не используете Github?

Для других платформ (Gitea, Github, Bitbucket) просто измените URL. Не меняйте имена пользователей (хотя и произвольные, они нужны для отдельных записей конфигурации).

Совместимость

Это работает локально в MacOS, Linux, Windows (в Bash), Docker, CircleCI, Heroku, Akkeris и т. Д.

Больше информации

См. Раздел «.gitconfig Вместо», из таблицы.

Безопасность

Смотрите раздел «Безопасность» в чит-листе.


2
Это спасатель. Спасибо.
annaoomph

2
То, что я был после того git config --global credential."https://somegithost.com".username MyUserName, что было , которое находится в вашей шпаргалке, но не где-нибудь еще в этой ветке ответов. Это конкретное решение не отвечает на вопрос ОП, но оно ответило на мой, так что спасибо!
TheDudeAbides

1
Это замечательно !!! Лучший ответ, большое спасибо.
Парса

12

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

git config --global credential.helper wincred 

и если вы используете репо с использованием ключа SSH, то вам нужен ключ SSH для аутентификации.


11

Ни один из ответов выше не работал для меня. Я получал следующее каждый раз, когда хотел fetchили pull:

Enter passphrase for key '/Users/myusername/.ssh/id_rsa':


Для Mac

Я смог остановить его от запроса моей парольной фразы:

  1. Откройте конфигурацию, запустив: vi ~/.ssh/config
  2. Добавлено следующее: UseKeychain yes
  3. Сохранено и выход : нажмите Esc , затем введите:wq!

Для Windows

Я смог заставить его работать, используя информацию в этом стеке обмена: https://unix.stackexchange.com/a/12201/348665


это потому, что вы используете протокол SSH (другие ответы используют HTTPS).
Мариус

6

Помимо редактирования ~/.gitconfigфайла, что вы можете сделать, если спросите:

git config --local --edit

или

git config --global --edit

Примечание, чтобы всегда использовать одинарные кавычки:

git config --local user.name 'your username'
git config --local user.password 'your password'

или

git config --global user.name 'your username'
git config --global user.password 'your password'

Ваше имя пользователя и пароль могут использовать некоторые символы, которые взломают ваш пароль, если вы используете двойные кавычки.

--localили --globalозначает, что параметры конфигурации сохранены для проекта или для пользователя ОС.


Проверьте также это одно , что объясняет еще больше.
прости

6

просто используйте

git config --global credential.helper store

и сделайте git pull , он запросит имя пользователя и пароль, с этого момента он не будет предоставлять никаких подсказок для имени пользователя и пароля, он будет хранить детали


4
Вы просто повторили принятый ответ .
jsamol

4

Храните имя пользователя и пароль в .git-credentials

.git-credentialsгде ваши имя пользователя и пароль (токен доступа) хранятся при запуске git config --global credential.helper store, что и предлагают другие ответы, а затем введите свое имя пользователя и пароль или токен доступа:

https://${username_or_access_token}:${password_or_access_token}@github.com

Итак, чтобы сохранить логин и пароль (токен доступа):

git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials

Это очень полезно для робота github, например, для решения цепных автоматических сборок в одном и том же хранилище докеров с помощью правил для разных веток, а затем для запуска их, вставив их в post_pushперехватчик в концентраторе докеров.

Пример этого можно увидеть здесь в stackoverflow.


Спасибо, ты спаситель жизни! Мы также можем установить https: // $ {access_token}: $ {access_token} @ github.com
Лукас Мендес Мота да Фонсека

1
@LucasMendesMotaDaFonseca токен доступа может использоваться как имя пользователя ???
JiaHao Xu

3

Быстрый способ кэширования учетных данных git:

git config credential.helper 'cache' --timeout=10800

красиво и безопасно

Тайм-аут в секундах.


2

После прочтения ветки в полном объеме и экспериментирования с большинством ответов на этот вопрос я в конце концов нашел процедуру, которая работает для меня. Я хочу поделиться этим в случае, если кто-то должен иметь дело со сложным вариантом использования, но все же не хочет проходить через весь поток и страницы руководства gitcredentials , gitcredentials-store и т. Д., Как я сделал.

Ниже приведена процедура, которую я предлагаю, если вам (как и мне) приходится иметь дело с несколькими репозиториями от нескольких провайдеров (GitLab, GitHub, Bitbucket и т. Д.) С использованием нескольких различных комбинаций имени пользователя и пароля. Если вместо этого у вас есть только одна учетная запись, то вам, возможно, лучше использовать решения git config --global credential.helper storeи git config --global user.name "your username"т. Д., Которые были очень хорошо объяснены в предыдущих ответах.

Мое решение:

  1. помощник по глобальным учетным данным, в случае, если какие-то эксперименты мешают :)

> git config --global --unset credentials.helper

  1. переместитесь в корневой каталог вашего репозитория и отключите локальный помощник по учетным данным (при необходимости)

> cd /path/to/my/repo

> git config --unset credential.helper

  1. создать файл для хранения учетных данных вашего репо в

> git config credential.helper 'store --file ~/.git_repo_credentials'

Примечание : эта команда создает новый файл с именем «.git_repo_credentials» в вашем домашнем каталоге, в который Git сохраняет ваши учетные данные. Если вы не укажете имя файла, Git будет использовать «.git_credentials» по умолчанию. В этом случае достаточно просто выполнить следующую команду:

> git config credential.helper store

  1. установите ваше имя пользователя

git config credential.*.username my_user_name

Примечание : обычно используйте «*», если ваши репозитории принадлежат одному провайдеру (например, GitLab). Если вместо этого ваши репозитории размещаются у разных провайдеров, то я предлагаю явно установить ссылку на провайдера для каждого репозитория, как в следующем примере (для GitLab):

git config credential.https://gitlab.com.username my_user_name

На этом этапе, если вы git pullвведете команду, требующую ваших учетных данных (например ), вас попросят ввести пароль, соответствующий «my_user_name». Это требуется только один раз, потому что git сохраняет учетные данные в «.git_repo_credentials» и автоматически использует те же данные при последующем доступе.


2

Из комментария rifrol о Linux Ubuntu, из этого ответа вот как в Ubuntu:

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Некоторые другие дистрибутивы предоставляют бинарный файл, поэтому вам не нужно его создавать.

В OS X он обычно поставляется «встроенным» с модулем по умолчанию «osxkeychain», так что вы получаете его бесплатно.


2

Проверьте официальную документацию по git:

Если вы используете SSH-транспорт для подключения к удаленным устройствам, вы можете иметь ключ без ключевой фразы, который позволяет безопасно передавать данные без ввода имени пользователя и пароля. Однако это невозможно с протоколами HTTP - для каждого соединения требуются имя пользователя и пароль. Это становится еще сложнее для систем с двухфакторной аутентификацией, где токен, который вы используете для пароля, генерируется случайным образом и непроизносим.

К счастью, у Git есть система учетных данных, которая может помочь с этим. У Git есть несколько опций, представленных в коробке:

  • По умолчанию кеш вообще не кешируется. Каждое соединение будет запрашивать у вас имя пользователя и пароль.

  • Режим «кэш» хранит учетные данные в памяти в течение определенного периода времени. Ни один из паролей никогда не хранится на диске, и они удаляются из кэша через 15 минут.

  • Режим «хранилище» сохраняет учетные данные в виде простого текстового файла на диске, и они никогда не истекают. Это означает, что до тех пор, пока вы не измените свой пароль для хоста Git, вам больше никогда не придется вводить свои учетные данные. Недостатком этого подхода является то, что ваши пароли хранятся в виде открытого текста в обычном файле в вашем домашнем каталоге.

  • Если вы используете Mac, Git поставляется с режимом «osxkeychain», который кэширует учетные данные в безопасной цепочке для ключей, привязанной к вашей системной учетной записи. Этот метод сохраняет учетные данные на диске, и срок их действия никогда не истекает, но они зашифрованы той же системой, в которой хранятся сертификаты HTTPS и автозаполнения Safari.

  • Если вы используете Windows, вы можете установить помощника под названием «Git Credential Manager для Windows». Это похоже на описанный выше помощник «osxkeychain», но использует хранилище учетных данных Windows для управления конфиденциальной информацией. Его можно найти по адресу https://github.com/Microsoft/Git-Credential-Manager-for-Windows .

Вы можете выбрать один из этих методов, установив значение конфигурации Git:

$ git config --global credential.helper cache

$ git config --global credential.helper store

https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.