Як зберегти ім'я користувача та пароль у git [GitExtension]?


1235

Я хочу використовувати "push and pull" автоматично в GitExtension , не вводячи свого користувача та пароля підказки кожного разу.

Тож як я можу зберегти свої облікові дані в git?


1
Ви також можете підтвердити автентифікацію через SSH: stackoverflow.com/questions/6565357/…
Антон Тарасенко


1
@AntonTarasenko мій gitconfig нічого не говорить про проксі, лише [користувач] email = email@dummy.com ім'я = uname [обліковий запис] помічник = магазин
gc7__

Відповіді:


2197

Біжи

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-облікових даних. Будь-хто може відкрити його та прочитати.
RoboAlex

12
Це не працює. Він не вдається витягнути.
Urasquirrel

348

Ви можете використовувати 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 також буде зберігатися в простому тексті в доступному для користувача місці, тому по суті однакова поверхня атаки в обох випадках.
Фалько

як я можу використовувати це для gitlab
Аніл

170

Рекомендований та безпечний метод: 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"

15
Для мене це не спрацювало, git clone все ще запитує ім’я користувача та пароль
Олівер

11
я не рекомендую зберігати свій пароль так, оскільки "git config --global -l" відкриє ваш пароль на консолі
CCC

1
Це не працює для мене. Дивно, що він повинен працювати для будь-кого, оскільки в специфікації gitconfig немає місця для "пароля"
Hamish Todd

.gitconfig - це інший файл. ТЕКСТОВА ПАРОЛЬ. Використовуйте "git config --global poveritel.helper кеш", якщо ви не можете використовувати ключі 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

ДЕ ДОМАН.XXX МОЖЕ БУТИ ГИТУБ.COM | BITBUCKET.ORG | ІНШИЙ

Див. Документи

Перезавантажте свій термінал.


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

33

Просто введіть свої облікові дані в 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
Loïch

Якщо ваш пароль у URL-адресі, він збереже його в історію вашого терміналу, тому цей спосіб не дуже безпечний.
Джош Коррея

Зауважте, що в даний час Wiki може бути клонований лише через https, а не sshтаке рішення, як таке може бути корисним там. Зауважте також, що ви можете використовувати маркер-oauth, який є максимально безпечним, ніж ваш пароль GitHub.
AstroFloyd

31

Для глобальної настройки відкрийте термінал (з будь-якого місця), виконайте наступне:

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

Таким чином, будь-яка локальна програма git repo, яка є у вас на комп'ютері, буде використовувати цю інформацію.

Ви можете індивідуально налаштувати кожне репо, виконавши:

  • відкрити термінал у папці repo.
  • запустіть наступне:

    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-poverljiv-store - помічник для зберігання облікових даних на диску


17

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

Якщо ви використовуєте Mac, автентифікація клієнта SSH інтегрується в брелок MacOS. Після створення ключа SSH введіть у свій термінал:

ssh-add -K ~/.ssh/id_rsa

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


1
має бути k не K?
dez93_2000

1
FYI: Я працюю на Mac. Сказавши це, з інформації про "man": "-k" Під час завантаження ключів у або видалення ключів з агента обробляйте лише звичайні приватні ключі та пропускайте сертифікати. "-K" При додаванні ідентифікацій кожна пропускна фраза також буде зберігатися в брелоку користувача. При видаленні тотожностей з -d кожна парольна фраза буде видалена з неї.
Birol Efe

3
Я не думаю, що це працює для https-сховищ.
zakmck

5
Здається, ця відповідь плутає паролі (HTTPS repos) із приватними ключами SSH.
Стів Беннетт

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

16

Переглянувши десятки публікацій SO, блогів тощо, я спробував кожен метод, і ось що я придумав. Він охоплює ВСЕ.

Варіанти DevOps Git Cententials & Cheatsheet для приватних пакетів

Це всі способи та інструменти, за допомогою яких можна надійно засвідчити git для клонування сховища без інтерактивного запиту пароля .

  • Загальнодоступні ключі SSH
    • SSH_ASKPASS
  • Токени доступу до API
    • GIT_ASKPASS
    • .gitconfig замістьOf
    • .gitconfig [обліковий запис]
    • .git-облікові дані
    • .netrc
  • Приватні пакети (безкоштовно)
    • node / npm package.json
    • вимоги python / pip / яйця.txt
    • рубінні дорогоцінні камені
    • голанг go.mod

Срібна куля

Хочете просто працює ™? Це чарівна срібна куля.

Отримайте маркер доступу (див. Розділ у шаблоні, якщо вам потрібні інструкції 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 замістьOf" шаблону.

Безпека

Дивіться розділ "Безпека" шаблону.


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

Мені вдалося змусити його працювати, використовуючи інформацію в цій зміні stackexchange: 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означає, що параметри конфігурації зберігаються для проекту або для користувача OS.


Перевірте також це одне , що пояснює ще більше.
prosti

6

просто використовувати

git config --global credential.helper store

і виконайте потяг git , він запитає ім’я користувача та пароль, відтепер він не надаватиме жодного запиту для імені користувача та пароля, він зберігатиме дані


4
Ви в основному повторили прийняту відповідь .
jsamol

4

Зберігайте ім’я користувача та пароль у .git-облікових даних

.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 for Windows". Це аналогічно помічнику "osxkeychain", описаному вище, але він використовує Windows Credential Store для контролю конфіденційної інформації. Його можна знайти за адресою 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.