Чи є спосіб кешування облікових даних GitHub для передачі комітетів?


1867

Нещодавно я перейшов на синхронізацію моїх сховищ до https: // на GitHub (через проблеми з брандмауером), і він щоразу запитує пароль.

Чи є спосіб кешувати облікові дані, замість того, щоб кожен раз це робити автентифікацію git push?



2
Тепер ви можете використовувати помічник довірених даних для шифрування _netrcфайлу, що містить ваші облікові дані. Дивіться мою відповідь нижче . Я виявив, що безпечніше, що git-credential-winstore.exe(кеш пам'яті), який трохи баггі в Windows.
VonC


git-credential-winstoreпрацював найкраще для Windows. Що баггі? Налаштування ssh є кращим варіантом, хоча я це робив уже кілька разів, це набагато більш схильний до помилок, а іноді просто не працює, коли вам потрібно підключитися до кількох хостів.
Брон Девіс

2
Під "сертифікатом SSH" я припускаю, що ви маєте на увазі "приватний ключ SSH".
Майкл Міор

Відповіді:


2369

З версією Git 1.7.9 та пізнішої версії

Оскільки Git 1.7.9 (вийшов наприкінці січня 2012 року), у Git існує чіткий механізм, щоб уникнути необхідності постійно вводити свій пароль для HTTP / HTTPS, які називаються помічниками довіри . (Завдяки dazonic, що вказав на цю нову функцію в коментарях нижче.)

З Git 1.7.9 або новішою версією ви можете просто скористатись одним із таких помічників:

git config --global credential.helper cache

... що дозволяє Git зберігати ваш запам'ятований пароль у пам'яті протягом 15 хвилин (за замовчуванням). Ви можете встановити більш тривалий тайм-аут за допомогою:

git config --global credential.helper "cache --timeout=3600"

(Цей приклад запропонований на довідковій сторінці GitHub для Linux .) Ви також можете постійно зберігати свої дані, якщо це потрібно, дивіться інші відповіді нижче.

Довідка GitHub також дозволяє припустити, що якщо ви працюєте на Mac OS X і використовуєте Homebrew для встановлення Git, ви можете використовувати рідну клавіатуру Mac OS X за допомогою:

git config --global credential.helper osxkeychain

Для Windows існує помічник під назвою Git Credential Manager для Windows або wincred в msysgit .

git config --global credential.helper wincred # obsolete

З Git для Windows 2.7.3+ (березень 2016 року):

git config --global credential.helper manager

Для Linux ви можете використовуватиgnome-keyring (або іншу реалізацію ключів, наприклад KWallet).

З версіями Git до 1.7.9

У версіях Git до 1.7.9 цей більш безпечний варіант недоступний, і вам потрібно буде змінити URL-адресу, яку originвикористовує ваш віддалений, щоб включити пароль таким чином:

https://you:password@github.com/you/example.git

... іншими словами, :passwordпісля імені користувача та перед @.

Ви можете встановити нову URL-адресу для свого originпульта за допомогою:

git config remote.origin.url https://you:password@github.com/you/example.git

Переконайтеся, що ви використовуєте https, і ви повинні знати, що якщо ви це зробите, ваш пароль GitHub буде зберігатися в простому тексті у вашому .gitкаталозі, що, очевидно, небажано.

З будь-якою версією Git (ну, оскільки версія 0,99)

Альтернативний підхід полягає в тому, щоб помістити своє ім’я користувача та пароль у свій ~/.netrcфайл, хоча, як і при збереженні пароля у віддаленій URL-адресі, це означає, що ваш пароль буде зберігатися на диску в простому тексті і, таким чином, менш захищений і не рекомендується. Однак, якщо ви хочете скористатися таким підходом, додайте такий рядок до свого ~/.netrc:

machine <hostname> login <username> password <password>

... замінюючи <hostname>ім'я хоста сервера, <username>а <password>також ваше ім'я користувача та пароль. Також не забудьте встановити для цього файлу обмежувальні дозволи файлової системи:

chmod 600 ~/.netrc

Зауважте, що в Windows цей файл повинен викликатись _netrc, і вам може знадобитися визначити змінну середовища% HOME% - для більш детальної інформації див:


72
Не зберігайте пароль у простому тексті. Станом на Git 1.7.9 ви можете використовувати довірені помічники. git config --global credential.helper osxkeychainпро ОС X. Для інших ОС див. help.github.com/articles/set-up-git
dazonic

6
FWIW, ось брелок osx є частиною базового вихідного коду GIT, це не ексклюзивна складова Brew чи MacPorts чи будь-який аромат місяця. І вам навіть не потрібно будувати git з нуля - просто cd contrib / poverljiv / osxkeychain / і запустіть make.
синтезаторпатель

2
З двофакторною автентифікацією ви повинні використовувати те, що github називає маркером доступу для людини . Насправді ви завжди повинні використовувати його, оскільки на відміну від пароля, ви можете контролювати, який доступ він надає. Просто замініть пароль в URL-адресі, щоб ви закінчилися https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Це робить звичайні текстові паролі, збережені на диску, майже безпечними для використання.
Рассел Стюарт

12
git config --global credential.helper cacheне працює на вікнах: stackoverflow.com/questions/11693074 / ... використання gitcredentialstore на Windows , бути щасливим
Sebastian J.

8
Будь-який спосіб встановити цей час очікування на нескінченність?
судо

720

Ви також можете постійно зберігати свої облікові дані Git, використовуючи наведені нижче дії.

git config credential.helper store

Примітка. Хоча це зручно, Git зберігатиме ваші облікові дані в чистому тексті у локальному файлі (.git-облікові дані) у вашому каталозі проектів (див. Нижче "домашній" каталог). Якщо вам це не подобається, видаліть цей файл та перейдіть до використання кеш-опції.

Якщо ви хочете, щоб Git знову попросив вас мати облікові дані кожного разу, коли потрібно підключитися до віддаленого сховища, ви можете запустити цю команду:

git config --unset credential.helper

Для зберігання паролів у .git-credentialsвашому %HOME%каталозі на відміну від каталогу проектів: використовуйте --globalпрапор

git config --global credential.helper store

7
У Windows ви можете скачати помічник утиліта налаштовує речі для зберігання зашифрованої версії вашого пароля ГИТ в Windows , Creditial Store, см confluence.atlassian.com/display/STASH / ...
репорт

76
Я виявив, що мені потрібно вказати --global або він намагатиметься зберігати налаштування у поточному сховищі:git config --global credential.helper store
Брайан Гордон

6
Навіщо робити кеш, а не постійно зберігати? Спільний доступ до комп'ютерів чи щось таке?
Майкл Дж. Калкінс

2
@BrianGordon Я використовую GIT 1.9.5 для Windows, і --globalпрапор був зайвим. Навіть без цього прапора в %USER_HOME%каталозі створено файл облікових даних .
jFrenetic

2
якщо він не зберігається в простому тексті, чим він захищений? Ваш пароль? Чи не доведеться тоді запитувати пароль адміністратора під час підключення до git? Чи не потрібно вводити пароль, щоб отримати інший пароль трохи дивно?
Cruncher

101

TLDR; Використовуйте зашифрований файл netrc з Git 1.8.3+ .

Збереження пароля для URL-адреси HTTPS-сховища Git можливо за допомогою ~/.netrc(Unix) або %HOME%/_netrc(зверніть увагу _) на Windows.

Але : Цей файл зберігатиме ваш пароль у простому тексті.

Рішення : Зашифруйте цей файл за допомогою GPG (GNU Guard Privacy) та змушуйте Git розшифровувати його щоразу, коли йому потрібен пароль (для push/ pull/ fetch/ cloneоперації).


Примітка. Завдяки Git 2.18 (Q2 2018) тепер ви можете налаштувати GPG, який використовується для розшифрування зашифрованого .netrcфайлу.

Див. Комісію 786ef50 , вчинити f07eeed (12 травня 2018 року) Луїса Марсано (``) .
(Об'єднано Хуніо С Хамано - gitster- у комітеті 017b7c5 , 30 травня 2018 року)

git-credential-netrc: прийняти gpgваріант

git-credential-netrcбуло жорстко закодовано для розшифрування за допомогою ' gpg' незалежно від параметра gpg.program.
Це проблема в дистрибутивах на зразок Debian, які називають сучасний GnuPG чимось іншим, наприклад ' gpg2'


Покрокові інструкції для Windows

З Windows:

(Git має gpg.exeв своєму розповсюдженні, але використовуючи повну установку GPG включає в себе A gpg-agent.exe, яке запам'ятовує вашу парольну фразу, пов’язану з вашим ключем GPG.)

  • Встановіть gpg4Win Lite, мінімальний інтерфейс командного рядка gnupg (візьміть останню версіюgpg4win-vanilla-2.X.Y-betaZZ.exe ) та заповніть свій PATH каталогом інсталяції GPG:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe

(Зверніть увагу на copyкоманду " ": Git для виконання команди знадобиться Bash-скрипту gpg. "Оскільки gpg4win-vanilla-2поставляється разом gpg2.exe, вам потрібно скопіювати його.)

  • Створіть або імпортуйте ключ GPG та довіряйте йому:

    gpgp --import aKey
    # or
    gpg --gen-key

(Обов’язково до цього ключа поставте фразу.)

  • Довіряйте цьому ключу

  • Встановіть довідковий скрипт довіри в каталог у вашому %PATH%:

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl

(Обережно: сценарій перейменований у Git 2.25.x / 2.26, див. Нижче)

(Так, це сценарій Bash, але він буде працювати в Windows, оскільки він буде називатися Git.)

  • Зробіть файл _netrc чітким текстом

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

(Не забувайте ' protocol' частина: ' http' або ' https' залежно від URL-адреси, яку ви будете використовувати.)

  • Зашифруйте цей файл:

    gpg -e -r a_recipient _netrc

(Тепер можна видалити в _netrcфайл, зберігаючи тільки _netrc.gpgзашифрований один.)

  • Використовуйте цей зашифрований файл:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(Зверніть увагу, що " /": C:\path\to...не працює взагалі.) (Спочатку ви можете використовувати, -v -dщоб побачити, що відбувається.)

Відтепер будь-яка команда Git, що використовує URL-адресу HTTP (S), для якої потрібна автентифікація, буде розшифровувати цей _netrc.gpgфайл та використовувати логін / пароль, пов’язані з сервером, з яким ви звертаєтесь. Перший раз GPG попросить вас пройти пароль вашого ключа GPG, щоб розшифрувати файл. В інший час gpg-агент, запущений автоматично під час першого дзвінка GPG, надасть вам цю парольну фразу.

Таким чином, ви можете запам'ятати кілька URL-адрес / входів / паролів в одному файлі і зберегти їх на диску зашифрованим.
Мені здається, що це зручніше, ніж "кеш-помічник", де потрібно запам'ятати та ввести (раз на сеанс) інший пароль для кожної з віддалених служб, щоб вказаний пароль був кешований у пам'яті.


З Git 2.26 (I квартал 2020 року) зразок допоміжних даних для використання .netrcбуло оновлено для роботи поза коробкою. Див. Виправлення / обговорення .

Див. Команду 6579d93 , здійснити 1c78c78 (20 грудня 2019 р.) Від Дентона Лю ( Denton-L) .
(Об’єднав Хуніо С Хамано - gitster- у комітеті 1fd27f8 , 25 грудня 2019 р.)

contrib/credential/netrc: зробити PERL_PATHнастроюваним

Підписаний: Дентон Лю

Шебанг шлях для перекладача Perl в git-credential-netrcбув жорстко кодований.
Однак, деякі користувачі можуть розмістити його в іншому місці, і, таким чином, доведеться вручну редагувати сценарій.

Додайте .perlдо скрипту префікс, щоб позначити його як шаблон і ігнорувати створену версію.
Доповніть в Makefileтакий спосіб , що він створює git-credential-netrcз git-credential-netrc.perl, так само як і інші скрипти Perl.

Рецепти Makefile були безсоромно вкрадені з contrib/mw-to-git/Makefile.

І:

З 2,26 (1 квартал 2020 р.) Зразок допоміжних помічників для використання .netrc було оновлено для роботи з коробки.

Див. Команду 6579d93 , здійснити 1c78c78 (20 грудня 2019 р.) Від Дентона Лю ( Denton-L) .
(Об’єднав Хуніо С Хамано - gitster- у комітеті 1fd27f8 , 25 грудня 2019 р.)

contrib/credential/netrc: робота поза репо

Підписаний: Дентон Лю

Наразі git-credential-netrcвін не працює поза сховищем git. Він не вдається зі наступною помилкою:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

Однак немає реальної причини, чому потрібно знаходитись у сховищі. Помічники довірених даних також повинні мати можливість добре працювати і поза сховищем.

Зателефонуйте у версію non-self, config()щоб git-credential-netrcбільше не потрібно запускати її у сховище.

Джефф Кінг ( peff) додає:

Я припускаю, що ви використовуєте зашифрований gpg netrc(якщо ні, ви, ймовірно, просто повинні використовувати credential-store).
Щодо доступу до пароля "лише для читання", я знаходжу комбінацію passз config, як це трохи приємніше:

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"

1
спробуй те ж саме на Linux ... git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..і я отримую "git: 'povericial-netrc" - це не див. "git --help" "
сонячно

4
@sunny Це для чого 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'.
VonC

Ну, _netrcмені не працювало на Windows 7ПК, але .netrcпрацював на youtube-dl з --netrcаргументом, переданим на нього.
Юліан Онофрей

@VonC, здається, поточна URL-адреса https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(трубопровід через сім років 😉)
Гвінет

1
@GwynethLlewelyn Дякую Відповідь я відредагував відповідно. Не соромтесь редагувати його самостійно, якщо ви бачите будь-яку іншу застарілу інформацію.
VonC

43

Існує простий, старомодний спосіб зберігання облікових даних користувачів у URL-адресі HTTPS:

https://user:password@github.com/...

Ви можете змінити URL-адресу за допомогою git remote set-url <remote-repo> <URL>

Очевидним недоліком цього підходу є те, що ви повинні зберігати пароль у простому тексті. Ви все одно можете просто ввести ім'я користувача ( https://user@github.com/...), що принаймні заощадить вам половину клопоту.

Ви можете віддати перевагу переходу на SSH або використовувати клієнтське програмне забезпечення GitHub.


2
Ім'я користувача / пароль , можливо , повинні бути закодовані, см stackoverflow.com/a/34611311/3906760
MrTux

43

Скористайтеся магазином облікових даних.

Для Git 2.11+ на OS X і Linux , використання Git вбудований в вірчі магазині :

git config --global credential.helper libsecret

Для msysgit 1.7.9 або новіших версій у Windows :

git config --global credential.helper wincred

Для Git 1.7.9+ на OS X використовуйте:

git config --global credential.helper osxkeychain

2
Я впевнений, що це шлях, але я сумно отримую помилку:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb

1
Дякую, але я якось отримую ту саму помилку. Я щось роблю не так? Я набираю команду, і нічого не відбувається. Як тільки я натискаю, мене запитують облікові дані, які я успішно вставляю, але я отримую помилку, що це не команда git після цього.
codepleb

2
Перед libsecret буде працювати на Linux, вам необхідно зробити наступні кроки: stackoverflow.com/a/40312117/775800
Lavamantis

1
Ще одне - якщо у Github увімкнено 2FA, ваш пароль не працюватиме. Але ви можете створити особистий маркер доступу на своїй сторінці "Налаштування" Github, і цей маркер працює як ваш пароль. github.com/github/hub/isissue/822
Lavamantis

3
Проблема безпеки: менеджер даних облікових записів Windows робить доступ до вашого простого тексту доступним для всіх, хто ввійшов у ваш обліковий запис Windows. Все, що їм потрібно зробити, - це надіслати запит менеджеру облікових даних, наприклад printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( детальніше тут ). Ви завжди повинні використовувати особистий маркер доступу з цим і, звичайно, використовувати 2FA у своєму акаунті GitHub.
cjs

40

Можна просто використовувати

git config credential.helper store

При наступному введенні пароля при натисканні або натисканні він буде зберігатися у файлі .git-облікових даних як звичайний текст (трохи незахищений, але просто помістіть його в захищену папку).

І це все, як зазначено на цій сторінці:

git-credential-store


3
Для Git для Windows 2.7.3 (березень 2016 року): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , це було б git config credential.helper managerзамість цього
VonC

23

Мені не відразу було очевидно, що мені потрібно спочатку завантажити помічник! Я знайшов завантаження файлу credential.helper у Atlassian's Permanently authentication with Git repositories .

Цитата:

Виконайте наступні дії, якщо ви хочете використовувати Git з кешуванням даних облікових даних в OS X:

Завантажте двійковий git-povericial-osxkeychain.

Виконайте команду нижче, щоб переконатися, що двійковий файл виконується:

chmod a+x git-credential-osxkeychain

Помістіть його в каталог /usr/local/bin.

Виконайте команду нижче:

git config --global credential.helper osxkeychain

23

Просто додайте облікові дані для входу як частину URL-адреси:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

Примітка. Я не рекомендую цей метод, але якщо ви поспішаєте і нічого іншого не працює, ви можете використовувати цей метод.


12
це спрацює, вам доведеться втекти @ з% 40 у своєму електронному ідентифікаторі
Tarun Gupta

Що робити, якщо в ідентифікаторі електронної пошти є "+"? Я спробував ту саму втечу, але поштовх сказав "repo not found"
killjoy

4
мати% 2B замість +
Тарун Гупта

Збереження пароля в простому та легкодоступному може бути не оптимальним рішенням.
зменшення активності

20

У налаштуваннях GNU / Linux, ~ / .netrc також працює досить добре:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Це може залежати від того, які мережеві бібліотеки Git використовує для транспортування HTTPS .


4
Обов’язково також chmod 0600 ~/.netrc.
poolie

Просто хочу залишити тут посилання на сторінку Ubuntu netrc . Мені потрібно було створити його для іншого користувача (/home/git/.netrc), а потім змінити право власності на цього користувача.
zacharydl

17

Для Windows можна використовувати плагін Git Credential Manager (GCM). В даний час підтримується Microsoft. Приємно те, що він зберігає пароль у магазині облікових записів Windows, а не як звичайний текст.

На сторінці випусків проекту є інсталятор . Це також встановить офіційну версію Git для Windows із вбудованим менеджером облікових даних. Це дозволяє двофакторну аутентифікацію для GitHub (та інших серверів). Має графічний інтерфейс для початкового входу.

Для користувачів Cygwin (або користувачів, які вже використовують офіційний Git для Windows), ви можете віддати перевагу встановленню вручну. Завантажте zip-пакет зі сторінки випусків . Витягніть пакет і запустіть install.cmdфайл. Це встановиться у вашу ~/binпапку. (Переконайтеся, що ваш ~/binкаталог знаходиться у вашому PATH.) Потім ви налаштуєте його за допомогою цієї команди:

git config --global credential.helper manager

Потім Git запустить git-credential-manager.exeпри аутентифікації на будь-якому сервері.


3
Усі користувачі, які увійшли до вашого облікового запису, мають простий доступ до простого тексту пароля. Все, що їм потрібно зробити, - це надіслати запит менеджеру облікових даних, наприклад printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( детальніше тут ). Ви завжди повинні використовувати особистий маркер доступу з цим і, звичайно, використовувати 2FA у своєму акаунті GitHub.
cjs

13

Якщо ви не хочете зберігати свій пароль у простому тексті, як сказав Марк, ви можете використовувати інший URL GitHub для отримання, ніж для натискання. У файлі конфігурації під [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

Він все одно запитуватиме пароль, коли ви натискаєте, але не під час отримання, принаймні, для проектів з відкритим кодом.


12

OAuth

Ви можете створити власний маркер API ( OAuth ) і використовувати його так само, як і звичайні облікові дані (за адресою /settings/tokens:). Наприклад:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

Інший спосіб полягає в налаштуванні користувача / пароля в ~/.netrc( _netrcв Windows), наприклад

machine github.com
login USERNAME
password PASSWORD

Для HTTPS додайте додатковий рядок:

protocol https

Довірений помічник

Щоб кешувати пароль GitHub в Git при використанні HTTPS, ви можете використовувати вірчі помічник сказати Git , щоб пам'ятати ім'я користувача і пароль GitHub кожен раз , коли він розмовляє з GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperобов’язково),
  • Windows: git config --global credential.helper wincred
  • Linux та інші: git config --global credential.helper cache

Пов'язані:


10

Ви можете використовувати довірені дані.

git config --global credential.helper 'cache --timeout=x'

де xкількість секунд.


7
Це кількість секунд ... Деякі генії оновили його як мілісекунди, і всі затвердили його, не перевіряючи. Будь ласка, не вводьте в оману людей, якщо ви не знаєте відповіді. Дякую!
Чаран

Ви можете дати посилання на те місце , де store, cacheі інші загальні речі , які перераховані і пояснені?
Notinlist

3
Не забудьте відзначити той факт, що це робить джек, якщо ви не викликаєте іншу конкретну команду, щоб спочатку використовувати кеш-пам'ять як менеджер? Цей матеріал настільки виразний, всі ці відповіді є неповними, і жодна з них не працює. Неймовірно засмучує. Дивіться замість цього: stackoverflow.com/a/24800870/88409
Triynko

10

Після клонування сховища repoви можете редагувати repo/.git/configта додавати конфігурацію, як показано нижче:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Тоді вас не просять usernameі passwordзнову.


Для мене працює helper = manager(але мене просять ім'я користувача + repo для першого натиску).
Стефан Лоран

з helper = менеджером я отримую помилку, акредитив-менеджер не є командою git
Капіль,

На жаль, git ігнорує пароль у файлі config. .git_credentials з credential.store - єдиний варіант.
Avamander

9

Я знаю, що це не безпечне рішення, але іноді потрібно просто просте рішення - не встановлюючи нічого іншого. А оскільки helper = store не працював для мене, я створив фіктивний помічник:

Створіть скрипт і помістіть його у папку бін користувачів, названу тут авторизованою версією , цей сценарій надасть ваше ім'я користувача та ваш пароль:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

зробити його виконуваним:

chmod u+x /home/mahuser/bin/credfake

потім налаштуйте його в git:

git config --global credential.helper /home/mahuser/bin/credfake

(або використовувати його без --global лише для одного репо)

і - voilá - git використовуватиме цей користувач + пароль.


Я згоден. Просте (якщо це не безпечне) рішення. +1, якщо ви знаєте, що робите.
VonC

7

Замість пароля облікового запису слід використовувати маркер автентифікації. Перейдіть у налаштування / програми GitHub, а потім створіть особистий маркер доступу. Маркер можна використовувати так само, як і пароль.

Маркер призначений, щоб користувачі не могли використовувати пароль облікового запису для роботи над проектом. Використовуйте пароль лише під час роботи з адміністрацією, наприклад, створюючи нові маркери або скасовуйте старі маркери.


Замість маркера або пароля, який надає користувачеві повний доступ до облікового запису GitHub, для надання доступу до одного сховища проекту може використовуватися специфічний для проекту ключ розгортання. Проект Git може бути налаштований на використання цього іншого ключа в наступних кроках, коли ви все ще можете отримати доступ до інших облікових записів або проектів Git зі своїм звичайним обліковим записом:

  1. Написати файл SSH конфігурації , який містить Host, IdentityFileдля ключа розгортання, може бути UserKnownHostsFile, і , можливо, User(хоча я думаю , що вам це не потрібно).
  2. Напишіть сценарій оболонки SSH оболонки, який практично є ssh -F /path/to/your/config $*
  3. Попередньо GIT_SSH=/path/to/your/wrapperперед звичайною командою Git. Тут git remote(походження) повинен використовувати git@github.com:user/project.gitформат.

7

Краще використовувати облікові дані для безпеки, але ви можете зберігати їх деякий час, використовуючи кеш:

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

Ваші облікові дані будуть збережені протягом 3600 секунд.


Це означає, що через 3600 секунд нам доведеться знову ввести пароль ??? Як зберегти їх назавжди?
HoangVu

$ git config poverljiv.helper 'кеш - timeout = 3600' помилка: не вдалося заблокувати файл конфігурації .git / config: Немає такого файлу чи каталогу
PlantationGator

Це спрацювало: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator

@Tama Я знаю, що минуло три роки, але ви можете просто залишити їх, --timeoutі облікові дані будуть збережені назавжди.
Ніл Чоуддурі

Чи буде це працювати всередині контейнера Docker (на основі windowsservercore)?
Пітер Мортенсен

5

Речі дещо відрізняються, якщо ви використовуєте двофакторну автентифікацію, як і я. Оскільки я не знайшов хорошої відповіді в іншому місці, я приклею його тут, щоб, можливо, пізніше його знайти.

Якщо ви використовуєте двофакторну автентифікацію, то введення імені користувача / пароля навіть не буде працювати - вам буде відмовлено у доступі. Але ви можете використовувати маркер доступу до програми та використовувати помічник довіри Git, щоб кешувати це для вас. Ось відповідні посилання:

І я не пам’ятаю, де я це бачив, але коли вас запитують ваше ім’я користувача - саме там ви наклеюєте маркер доступу до програми. Потім залиште пароль порожнім. Це працювало на моєму Mac.


при двосторонній аутентифікації ви використовуєте в якості пароля "маркер доступу". ім’я користувача залишається таким же, як завжди
Бен Іцхакі


4

Зазвичай у вас є віддалена URL-адреса, щось подібне,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Якщо ви хочете пропустити ім'я користувача та пароль під час використання git push, спробуйте:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

Я щойно додав ту саму URL-адресу (з інформацією про користувача, включаючи пароль).

ПРИМІТКА. Це не працює, якщо ім'я користувача - це ідентифікатор електронної пошти.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

Я отримав свою відповідь від сторінки gitcredentials (7) . У моєму випадку я не маю кеш-пам'яті у своїй установці Windows; Я використовую обліковий запис-обліковий запис.

Після того як я використовую сховище даних облікових даних, ім’я користувача / пароль зберігаються у файлі [папка користувача] /. Щоб видалити ім’я користувача / пароль, просто видаліть вміст файлу.


2
Якщо у вас немає кеш-файлів даних у вашому Windows, я б запропонував постійно використовувати git config --global credential.helper wincredцей файл зберігання паролем.
Четабахана

2

У документації на композитора згадується, що ви можете запобігти його використанню API GitHub, щоб він діяв як git clone:

Якщо ви встановите no-apiключ у trueсховищі GitHub, він буде клонувати сховище, як і у будь-якому іншому сховищі Git, замість використання API GitHub. Але на відміну від gitпрямого використання драйвера, композитор все ще намагатиметься використовувати поштові файли GitHub.

Отже, розділ виглядатиме так:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Майте на увазі, що API існує з причини. Тож це має бути останнім способом щодо збільшення навантаження на github.com.


Не впевнене, що ця відповідь стосується оригінального запитання.
Чарльз Опперман

2

Ви також редагуєте файл bashrc і додаєте до нього сценарій.

Це запитує ваш пароль один раз, коли ви запускаєте Git, а потім запам'ятовує його, поки ви не вийдете.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

Якщо ви користуєтесь, osxkeychainа маркер закінчився, і хочете оновити його, виконайте наступні дії:

Запустіть у терміналі, а потім двічі натисніть клавішу Enter.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Тепер вам буде запропоновано ввести ім’я користувача / пароль. Однак іноді здається, що це не "бере", і вам доведеться продовжувати входити.

Якщо так, перезавантажте комп'ютер . Тепер наступного разу, коли ви запустите команду git та введете своє ім’я користувача / пароль, вони будуть збережені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.