Есть ли способ пропустить ввод пароля при использовании https: // на GitHub?

1650

Недавно я переключил синхронизацию своих репозиториев на https://на GitHub (из-за проблем с брандмауэром) и каждый раз запрашивает пароль. Раньше я имел сертификат SSH, и этого было достаточно. Есть ли способ обойти пароль в моем случае (используя http/https)?

  • 1
    Смотрите также superuser.com/questions/199507/…
  • 2
    Теперь вы можете использовать учетную запись помощника для шифрования файла _netrc содержащего ваши учетные данные. Смотрите мой ответ ниже . Я обнаружил, что безопаснее, чем git-credential-winstore.exe (кэш памяти), который немного глючит в Windows.
Показать ещё 3 комментария
Теги:
authentication
github

24 ответа

2181
Лучший ответ

С 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 help также предлагает, что если вы находитесь в Mac OS X и используете Homebrew для установки Git, вы можете использовать собственное хранилище Mac OS X с:

git config --global credential.helper osxkeychain

Для Windows есть помощник Git Диспетчер учетных данных для Windows или wincred in 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:[email protected]/you/example.git

... другими словами, с :password после имени пользователя и перед @.

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

git config remote.origin.url https://you:[email protected]/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% - для получения дополнительной информации см.

  • 68
    Не храните свой пароль в виде простого текста. Начиная с Git 1.7.9 вы можете использовать учетные данные помощников. git config --global credential.helper osxkeychain в OS X. Для других ОС см. help.github.com/articles/set-up-git
  • 4
    FWIW, брелок osx является частью базового исходного кода GIT, он не является эксклюзивным компонентом Brew или MacPorts или какой бы то ни было разновидностью месяца. И вам даже не нужно собирать git с нуля - просто cd contrib / credential / osxkeychain / и запустите make.
Показать ещё 20 комментариев
585

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

git config credential.helper store

Примечание. Хотя это удобно, Git будет хранить ваши учетные данные в виде открытого текста в локальный файл (.git-credentials) в вашем каталоге проектов (см. ниже для "домашнего" каталога). Если вам это не нравится, удалите этот файл и переключитесь на использование кеш.

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

git config --unset credential.helper

Чтобы сохранить пароли в .git-credentials в каталоге %HOME% в отличие от каталога проекта: используйте флаг --global

git config --global credential.helper store
  • 7
    В Windows вы можете скачать помощник утилита настраивает вещи для хранения зашифрованной версии вашего GIT пароля в Windows , Creditial Store, см confluence.atlassian.com/display/STASH/...
  • 73
    Я обнаружил, что мне нужно было указать --global, иначе он попытается сохранить настройки в текущем репозитории: git config --global credential.helper store
Показать ещё 9 комментариев
80

TL;DR; Используйте зашифрованный файл netrc с Git 1.8.3 +.

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

Но: этот файл будет хранить ваш пароль в виде обычного текста.

Решение. Зашифруйте этот файл с помощью GPG (Защита конфиденциальности GNU) и сделайте Git расшифровать его каждый (для push/pull/fetch/clone).


Пошаговые инструкции для Windows

В Windows:

(Git имеет gpg.exe в своем дистрибутиве, но с использованием полной установки GPG включает 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 script для выполнения команды 'gpg'. Поскольку gpg4win-vanilla-2 поставляется с gpg2.exe, вам необходимо его дублировать.)

  • Создайте или импортируйте ключ GPG и доверьтесь ему:

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

(Не забудьте поставить кодовую фразу на этот ключ.)

  • Доверяйте этому ключу

  • Установите помощник учетных данных script в каталог в вашем %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
    

(Да, это Bash script, но он будет работать в 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-agent , автоматически запускаемый при первом вызове GPG, предоставит вам эту фразу.

Таким образом, вы можете запоминать несколько URL-адресов/логинов/паролей в одном файле и хранить их на своем диске в зашифрованном виде.
Я считаю, что это более удобно, чем "помощник кеша", где вам нужно запомнить и ввести (один раз за сеанс) другой пароль для каждой из ваших удаленных служб, поскольку указанный пароль будет кэшироваться в памяти.

  • 1
    попробую то же самое в Linux .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..и я получаю "git: 'credential-netrc' не является команда git. смотри 'git --help' "
  • 4
    @sunny Вот для чего curl -oc:\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 '.
Показать ещё 2 комментария
32

Там простой, старомодный способ хранения учетных данных пользователя в URL-адресе HTTPS:

https://user:[email protected]/...

Вы можете изменить URL с помощью git remote set-url <remote-repo> <URL>

Очевидным недостатком этого подхода является то, что вы должны хранить пароль в виде обычного текста. Вы все равно можете просто ввести имя пользователя (https://[email protected]/...), которое, по крайней мере, избавит вас от хлопот.

Вы можете переключиться на SSH или использовать клиентское программное обеспечение GitHub.

  • 1
    Возможно, необходимо закодировать имя пользователя / пароль, см. Stackoverflow.com/a/34611311/3906760
29

Использовать хранилище учетных данных.

Для git 2.11+ в OSX и 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'.
  • 0
    @TrudleR Я обновил свой ответ, чтобы рекомендовать обновить git до 2.11 а затем, используя git config --global credential.helper libsecret похоже, что gnome-keyring устарела stackoverflow.com/questions/13385690/…
Показать ещё 5 комментариев
24

Вы можете просто использовать

git config credential.helper store

Когда вы вводите пароль в следующий раз с нажатием или нажатием, он будет сохранен в .git-credentials как обычный текст (немного небезопасный, но просто помещаем его в защищенную папку)

И это, как указано на этой странице:

https://git-scm.com/docs/git-credential-store

18

Вероятно, я немного медленный, но мне не сразу стало ясно, что мне нужно сначала скачать помощника! Я нашел учетную запись credential.helper в Atlassian На постоянной аутентификации с репозиториями Git, надеюсь, что это поможет.

Цитата:

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

Загрузите двоичный git -credential-osxkeychain.

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

chmod a+x git-credential-osxkeychain

Поместите его в каталог /usr/local/bin.

Выполните следующую команду:

git config --global credential.helper osxkeychain
15

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

git remote rm origin 
git remote add origin https://username:[email protected]/path/to/repo.git
  • 2
    не работает, если имя пользователя - электронная почта
  • 10
    это сработает, вам нужно экранировать @ с% 40 в идентификаторе вашей электронной почты
Показать ещё 4 комментария
15

В настройках GNU/Linux, ~/.netrc работает также хорошо:

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

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

  • 4
    Убедитесь, что также chmod 0600 ~/.netrc .
  • 0
    Просто хочу оставить ссылку здесь на man-страницу Ubuntu netrc . Мне нужно было создать его для другого пользователя (/home/git/.netrc), а затем сменить владельца на этого пользователя.
12

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

На странице появляется программа установки > проекта. Это также установит официальную версию git -for-windows с помощью встроенного администратора учетных данных. Он позволяет двухфакторную аутентификацию для github (и других серверов). И имеет графический интерфейс для первоначального входа в систему.

Для пользователей cygwin (или пользователей, уже использующих официальные git -for-windows), вы можете предпочесть ручную установку. Загрузите пакет zip с релизы. Извлеките пакет, затем запустите install.cmd. Это будет установлено в вашу папку ~/bin. (Убедитесь, что ваш каталог ~/bin находится в вашем PATH.) Затем вы настраиваете его с помощью этой команды:

git config --global credential.helper manager

Git будет запускать git-credential-manager.exe при аутентификации на любой сервер.

  • 2
    Любой, кто вошел в вашу учетную запись, имеет легкий доступ к открытому тексту пароля. Все, что им нужно сделать, это отправить запрос диспетчеру учетных данных, например printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get ( подробнее здесь ). Вы должны всегда использовать личный токен доступа и, конечно, использовать 2FA в своей учетной записи GitHub.
11

Если вы не хотите хранить свой пароль в виде открытого текста, например, как сказал Марк, вы можете использовать другой URL-адрес github для извлечения, чем для pushing. В вашем файле конфигурации под [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git

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

8

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

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

где x - количество секунд.

  • 7
    Это количество секунд ... Какой-то гений обновил его за миллисекунды, и все одобрили его без проверки. Пожалуйста, не вводите людей в заблуждение, если вы не знаете ответ. Спасибо!
  • 0
    Можете ли вы дать ссылку на место, где store , cache и другие общие вещи перечислены и объяснены?
Показать ещё 2 комментария
6

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

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

Затем вас больше не будут запрашивать username и password.

  • 0
    У меня работает с helper = manager (но меня просят имя пользователя + репо для первого нажатия).
  • 0
    с помощником = менеджер я получаю сообщение об ошибке - учетная запись менеджера не является командой git
Показать ещё 1 комментарий
6

OAuth

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

git remote add fork https://[email protected]/foo/bar
git push fork

.netrc

Другим способом является использование вашего пользователя/пароля в ~/.netrc (_netrc в Windows), например

machine github.com
login USERNAME
password PASSWORD

Для https:

machine github.com
login USERNAME
password PASSWORD
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

по теме:

5

Вместо пароля учетной записи следует использовать токен аутентификации. Перейдите в настройки/приложения GitHub, а затем создайте токен доступа. Маркер может использоваться так же, как и пароль.

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


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

  • Напишите файл конфигурации SSH, содержащий Host, IdentityFile для ключа развертывания, возможно, UserKnownHostsFile и, возможно, User (хотя я думаю, что вам это не нужно).
  • Записать оболочку оболочки SSH script, которая фактически равна ssh -F /path/to/your/config $*
  • Подготовьте GIT_SSH=/path/to/your/wrapper перед вашей обычной командой Git. Здесь git remote (origin) должен использовать формат [email protected]:user/project.git.
4

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

Если вы используете двухфакторную аутентификацию, то указание имени пользователя и пароля даже не будет работать - вы получите отказ в доступе. Но вы можете использовать токен доступа к приложениям и использовать Git помощник учетных данных для кэширования для вас. Вот ссылки:

И я не помню, где я это видел, но когда вас попросят указать ваше имя пользователя - там, где вы прикрепляете токен доступа к приложениям. Затем оставьте пароль пустым. Он работал на моем Mac.

  • 0
    при использовании двухсторонней аутентификации вы используете «токен доступа» в качестве пароля. имя пользователя остается неизменным
3

Я знаю, что это не безопасное решение, но иногда вам нужно простое решение - без установки чего-либо еще. И поскольку helper = store не работал у меня, я создал вспомогательный помощник:

Создайте script a и поместите его в свою папку bin пользователя, здесь с именем credfake, этот script предоставит ваше имя пользователя и пароль:

#!/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 будет использовать этот пользователь + пароль.

  • 0
    Согласен. Простое (если не надежное) решение действительно. +1, если вы знаете, что делаете.
3

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

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

Ваши учетные данные будут сохранены на 3600 секунд.

  • 0
    Это значит, что через 3600 секунд мы должны снова ввести пароль ??? Как сохранить их навсегда?
  • 0
    $ git config credential.helper 'cache --timeout = 3600' ошибка: не удалось заблокировать файл конфигурации .git / config: такого файла или каталога нет
Показать ещё 3 комментария
2

Это работает для меня. Я использую Windows 10

git config --global credential.helper wincred
2

Получил ответ от gitcredentials (7) Страница руководства. В моем случае у меня нет кеша учетных данных в моей установке Windows; Я использую хранилище учетных данных.

После использования хранилища учетных данных имя пользователя/пароль хранятся в файле [user folder]/. git-credentials. Чтобы удалить имя пользователя/пароль, просто удалите содержимое файла.

  • 1
    Если в ваших окнах нет кэша учетных данных, я бы предложил использовать git config --global credential.helper wincred сохранения этого хранилища пароля.
1

Обычно у вас есть удаленный 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:[email protected]/username/Repo.git

Я только что добавил тот же url (с информацией о пользователе, включая пароль) в начало.

ПРИМЕЧАНИЕ. Это не работает, если имя пользователя является идентификатором электронной почты.

git remote -v

origin  https://username:[email protected]/username/Repo.git (fetch)
origin  https://username:[email protected]/username/Repo.git (push)
1

Вы также редактируете файл bashrc и добавляете в него script. Это будет запрашивать пароль при запуске 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
1

Документация композитора упоминает, что вы можете помешать ей использовать API GitHub, чтобы он действовал как git clone:

Если вы установите ключ no-api в true в репозитории GitHub, он будет клонировать репозиторий, как и в любом другом репозитории Git, вместо использования API GitHub. Но в отличие от использования драйвера git, композитор все равно попытается использовать zip файлы GitHub.

Итак, раздел будет выглядеть так:

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

Имейте в виду, что API существует по какой-то причине. Таким образом, это должно быть методом последней инстанции относительно увеличения нагрузки на github.com.

  • 0
    Не уверен, что этот ответ имеет отношение к первоначальному вопросу.
0
  • Если у вас уже есть проекты:

    • перейдите к your/project/path/.git/config. Открой это. И измените URL-адреса, как url = https://[email protected]/project.git, чтобы: url = https://username:[email protected]/project.git
    • Или просто запустите эти команды в качестве своего проекта:
      git remote rm origin
      git remote add origin https://username:[email protected]/project.git
  • Если вы клонируете новый проект:
    git clone https://username:[email protected]/project.git

  • Подключение к существующему репозиторию:
    git remote add origin https://username:[email protected]/project.git

Ещё вопросы

Сообщество Overcoder
Наверх
Меню