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

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

28 ответов

Решение

С 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 Remote использует для включения пароля следующим образом:

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% - для получения более подробной информации смотрите:

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

git config credential.helper store

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

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

git config --unset credential.helper

Хранить пароли в .git-credentials в вашем %HOME% каталог в отличие от каталога проекта: используйте --global флаг

git config --global credential.helper store

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

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

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

Решение: зашифруйте этот файл с помощью GPG (GNU Privacy Guard) и заставьте 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 включает в себя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'command: 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
    

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

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

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

Для 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

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

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

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

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

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

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

git config credential.helper store

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

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

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

Просто включите регистрационные данные как часть URL:

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

Для меня не сразу было очевидно, что мне сначала нужно загрузить помощника! Я нашел загрузку credential.helper в Atlassian's Постоянная аутентификация с репозиториями Git.

Цитата:

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

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

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

chmod a+x git-credential-osxkeychain

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

Запустите команду ниже:

git config --global credential.helper osxkeychain

На установке GNU/Linux ~/.netrc тоже работает довольно хорошо:

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

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

Для 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 при аутентификации на любом сервере.

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

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

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

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:

machine github.com
login USERNAME
password PASSWORD
protocol https

Помощник по учету

Чтобы кэшировать свой пароль GitHub в Git при использовании HTTPS, вы можете использовать помощник по учетным данным, чтобы Git запомнил ваше имя пользователя и пароль GitHub при каждом обращении к GitHub.

  • Mac: git config --global credential.helper osxkeychain (osxkeychain helper необходимо),
  • Окна: git config --global credential.helper wincred
  • Linux и другие: git config --global credential.helper cache

Связанные с:

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

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

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

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

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

Тогда вас не попросят username а также password снова.

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

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

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

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

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


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

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

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

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

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

Обычно у вас есть удаленный 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)

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

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

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

По состоянию на 2021 год существует безопасное и удобное кроссплатформенное решение для удаленных HTTPS-доступов. Больше не нужно вводить пароли! Больше никаких SSH-ключей! Никаких токенов личного доступа!

Установите Git Credential Manager , разработанный GitHub (загрузки ). Он поддерживает аутентификацию OAuth без пароля для GitHub, BitBucket, Azure и GitLab. Это означает, что вы можете включить двухфакторную аутентификацию на GitHub и других платформах, что значительно повысит безопасность ваших учетных записей.

При нажатии вам предлагается выбор методов аутентификации:

      > git push
Select an authentication method for 'https://github.com/':
  1. Web browser (default)
  2. Device code
  3. Personal access token
option (enter for default): 1
info: please complete authentication in your browser...

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

      git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions=--timeout 72000

Опытные пользователи, знакомые с gnome-keyring или KWallet, могут предпочесть изменить хранилище учетных данных на libsecret.

Косметическая конфигурация : поскольку я всегда выбираю «веб-браузер» в приведенной выше подсказке, я установил предпочтение gitHubAuthModes , чтобы пропустить выбор. Последние версии GCM включают графический интерфейс, который добавляет дополнительный щелчок в поток аутентификации, я отключил этот файл .

      git config --global credential.gitHubAuthModes browser
git config --global credential.guiPrompt false

Снимок экрана авторизации GCM для доступа к вашей учетной записи GitHub (виден только в первый раз):

Скриншот последующей аутентификации (просматривается один раз в день). Нет необходимости в кликах.

Наконец, ссылка для проверки приложений, подключенных к вашей учетной записи GitHub https://github.com/settings/applications .

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

git config --global credential.helper wincred

Вы также редактируете файл 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

Я получил ответ от gitcredentials(7). В моем случае в моей установке Windows нет кэша учетных данных; Я пользуюсь credential-store.

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

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

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

Таким образом, раздел будет выглядеть так:

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

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

Кэширование учетных данных локально с помощью Git Credential Manager (GCM) в Ubuntu, протестировано в Ubuntu 20.04 и 18.04, но должно работать в других дистрибутивах Linux.

  1. Настройте диспетчер учетных данных git:
      curl -LO https://raw.githubusercontent.com/GitCredentialManager/git-credential-manager/main/src/linux/Packaging.Linux/install-from-source.sh
sh ./install-from-source.sh
git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions "--timeout 72000"
sudo rm -rf git-credential-manager/
sudo rm install-from-source.sh
  1. Зайдите в репозиторий и запустите git fetch
  2. Выбирать Device code
  3. Перейдите по ссылке и введите код, указанный в выводе.

Двухфакторная аутентификация изменила способ аутентификации пользователей на веб-сайтах, но Git по-прежнему предполагает, что пользователи могут вводить пароль из памяти.

Представляем git-credential-oauth: помощник учетных данных Git, который безопасно аутентифицирует GitHub, GitLab, BitBucket и другие подделки с использованием OAuth.

Больше никаких паролей! Никаких токенов личного доступа! Больше никаких SSH-ключей!

При первом нажатии помощник откроет окно браузера для аутентификации. Последующие нажатия в течение тайм-аута кэша не требуют взаимодействия.

Установить с https://github.com/hickford/git-credential-oauth/releases/

Настроить с помощью:

      git config --global --unset-all credential.helper
git config --global --add credential.helper "cache --timeout 7200" # two hours
git config --global --add credential.helper oauth

У меня также была эта проблема в MacOS, и у меня сработала следующая команда:

      rm -rf  ~/.git-credentials 

Это принудительный метод действительного удаления всех учетных данных git. И в следующий раз я использовал pushкоманда, вуаля: мне предлагается ввести имя пользователя и пароль (или токен).

Если вы используете osxkeychain Срок действия токена истек, и вы хотите его обновить, выполните следующие действия:

Запустите терминал и дважды нажмите Enter.

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

Теперь вам будет предложено ввести имя пользователя / пароль. Однако иногда кажется, что этого не происходит, и вам нужно продолжать входить повторно.

Если да, перезагрузите компьютер. Теперь, когда вы в следующий раз запустите команду git и введете свое имя пользователя / пароль, она будет сохранена.

Другие вопросы по тегам