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
, вам потрібно скопіювати його.)
(Обов’язково до цього ключа поставте фразу.)
Довіряйте цьому ключу
Встановіть довідковий скрипт довіри в каталог у вашому %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.)
(Не забувайте ' protocol
' частина: ' http
' або ' https
' залежно від URL-адреси, яку ви будете використовувати.)
(Тепер можна видалити в _netrc
файл, зберігаючи тільки _netrc.gpg
зашифрований один.)
(Зверніть увагу, що " /
": 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 р.)
Підписаний: Дентон Лю
Шебанг шлях для перекладача 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 р.)
Підписаний: Дентон Лю
Наразі 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"