Git - Как использовать файл .netrc в Windows для сохранения пользователя и пароля

172

Можно ли использовать файл .netrc в Windows, когда я использую Git для клонирования удаленного репозитория с HTTP и паролем пользователя?

Бернд Клаус
источник

Ответы:

203

Можно ли использовать .netrcфайл в Windows?

Да, вы должны:

  • определить переменную окружения %HOME%(до Git 2.0, больше не требуется с Git 2.0+)
  • положить _netrcфайл в%HOME%

Если вы используете Windows 7/10, в CMDсеансе введите:

setx HOME %USERPROFILE%

и %HOME%будет установлен в ' C:\Users\"username"'.
Перейдите в эту папку ( cd %HOME%) и создайте файл с именем ' _netrc'

Примечание: Опять же , для Windows, вам нужно « _netrc» файл, а не а « .netrcфайл».

Его содержание вполне стандартно (замените его на <examples>свои значения):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

Люк упоминает в комментариях:

Используя последнюю версию msysgit на Windows 7, мне не нужно было устанавливать HOMEпеременную среды. Один _netrcфайл сделал свое дело.

Это действительно то, что я упомянул в « Попытке install« github, .sshdir not there »:
git-cmd.batвключение в msysgit устанавливает %HOME%переменную окружения:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

爱国者 верит в комментарии, что «кажется, что это не будет работать для протокола HTTP»

Однако я ответил, что netrcон используется curlи работает для протокола HTTP, как показано в этом примере (см. « netrcНа странице»):. Также используется с протоколом HTTP здесь: " _netrc/ .netrcальтернативаcURL ".


Распространенная ловушка с netrcподдержкой Windows заключается в том, что git будет обходить его, если в исходном URL-адресе https указано имя пользователя.

Например, если ваш .git/configфайл содержит:

[удаленное "происхождение"]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https: //bob@code.google.com/p/my-project/

Git не разрешит ваши учетные данные через _netrc, чтобы исправить это, удалите ваше имя пользователя, например так:

[удаленное "происхождение"]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https://code.google.com/p/my-project/

Альтернативное решение: С мерзавца версии 1.7.9+ (январь 2012): Этот ответ от Марка Longair детализирует удостоверении механизм кэширования , который также позволяет не хранить пароль в виде простого текста , как показано ниже.


С Git 1.8.3 (апрель 2013):

Теперь вы можете использовать зашифрованный .netrcgpg).
В Windows: %HOME%/_netrc( _не ' .')

Добавлен новый помощник по учетнымcontrib/ данным ( только для чтения ) для взаимодействия с .netrc/.authinfoфайлами.

Этот сценарий позволит вам использовать файлы netrc, зашифрованные в формате gpg , что позволит избежать сохранения ваших учетных данных в текстовом файле.

Файлы с .gpgрасширением будут расшифрованы GPG перед анализом.
Несколько -fаргументов в порядке. Они обрабатываются по порядку, и первая найденная совпадающая запись возвращается через вспомогательный протокол учетных данных.

Если нет -fопции не задана, .authinfo.gpg, .netrc.gpg, .authinfo, и .netrcфайлы в вашем домашнем каталоге, используются в этом порядке.

Чтобы включить этот помощник учетных данных:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Обратите внимание, что Git добавит " git-credential-" к имени помощника и будет искать его в пути.)

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

Смотрите полный пример на " Есть ли способ пропустить ввод пароля при использованииhttps:// github "


С Git 2.18+ (июнь 2018 г.) вы теперь можете настроить программу GPG, используемую для расшифровки зашифрованного .netrcфайла.

Смотрите коммит 786ef50 , коммит f07eeed (12 мая 2018 г.) Луиса Марсано (``) .
(Слито Junio C Hamano - gitster- в фиксации 017b7c5 , 30 мая 2018 года)

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

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

VonC
источник
@Bernd: HOMEпеременная среды важна, потому что она не определена по умолчанию в Windows. Вы можете установить эту переменную в любой каталог, который вам нужен (это необязательно C:\users\mylogin): например, на работе я установил ее на свой частный удаленный диск, связанный с моей учетной записью Windows, что позволяет мне переключаться между рабочими столами без потери мои .sshили _netrcнастройки.
VonC
@Bernd: проверьте также, находится ли ваш репозиторий Git на сервере LAN или WAN (Интернет). Вам может потребоваться определить http.proxyпеременные в вашей среде. Или, наоборот, добавить свой сервер в no_proxyпеременную, чтобы не пытаться получить доступ к серверу локальной сети через глобальную сеть.
VonC
Какое имя и значение для переменной среды? Не могли бы вы быть немного более конкретным VonC
Деннис D
@DennisD: две переменные среды, о которых я говорю в ответе и в комментариях: HOME и http_proxy. HOME будет ссылаться на любой каталог, который вы хотите. http_proxy будет ссылаться на адрес прокси, если он у вас есть.
VonC
Используя последнюю версию msysgitWindows 7, мне не нужно было устанавливать HOMEпеременную окружения. Один _netrcфайл сделал свое дело.
Лука
35

Вы также можете установить Git Credential Manager для Windows для сохранения паролей Git в диспетчере учетных данных Windows вместо _netrc. Это более безопасный способ хранения паролей.

KindDragon
источник
8
Отличный ответ, это единственный ответ, который я нашел, который позволяет мне сохранять простоту имени пользователя / пароля (надежно) без необходимости иметь дело со всем этим дерьмом SSH.
Кирк Волл
@KirkWoll смотрите мой ответ об обновлении выше: теперь вы можете хранить свои учетные данные в зашифрованном .netrcфайле. Вам не нужно будет вводить эти учетные данные даже один раз во время сеанса.
VonC
11

Это позволит Git аутентифицироваться на HTTPS, используя .netrc:

  • Файл должен быть назван _netrcи расположен в c:\Users\<username>.
  • Вам потребуется установить переменную среды с именем HOME=%USERPROFILE%(установите общесистемные переменные среды с помощью параметра «Система» на панели управления. В зависимости от версии Windows вам может потребоваться выбрать «Дополнительные параметры».).
  • Пароль, хранящийся в _netrcфайле, не может содержать пробелов (цитирование пароля не будет работать).
EBlake
источник
Самое простое и лучшее решение. Работал как шарм с Android Studio, Source Tree и Git командной строки. Я должен был использовать это, когда Google рекомендовал Cloud SDK, опция credential.helper не удалась, и мне пришлось вручную создавать учетные данные и использовать с файлом net rc. В моем случае я не нуждался в варианте 2 и 3.
Хари
1

Я выкладываю способ _netrcзагрузки материалов с сайта www.course.com.

Если кто-то собирается использовать coursera-dl для загрузки материалов открытого класса на www.coursera.com и в ОС Windows, то кто-то хочет использовать файл, подобный «.netrc», который находится в аналогичной ОС Unix, для добавления вариант -nвместо -U <username> -P <password>удобства. Он / она может сделать это так:

  1. Проверьте домашний путь в ОС Windows: setx HOME %USERPROFILE%(см . Ответ VonC ). Это сохранит HOMEпеременную среды как C:\Users\"username".

  2. Найдите в каталоге C:\Users\"username"и создайте имя файла _netrc. ПРИМЕЧАНИЕ: там нет никакого суффикса. содержание как:machine coursera-dl login <user> password <pass>

  3. Используйте команду как coursera-dl -n --path PATH <course name>для загрузки материалов класса. Больше параметров Coursera-DL для этой страницы .

BO.LI
источник