Есть ли способ пропустить ввод пароля при использовании 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 в виде обычного текста (немного небезопасно, но просто поместите его в защищенную папку).
И это все, как указано на этой странице:
Просто включите регистрационные данные как часть 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
Связанные с:
- Как хранить пароль https от GitHub в Linux в цепочке ключей терминала?
- Как я могу убедиться, что Git не запрашивает у меня имя пользователя и пароль GitHub?
- Настройте Git-клиенты, такие как GitHub для Windows, чтобы не запрашивать аутентификацию
- Передача локального репо в репозиторий GitHub с двухфакторной аутентификацией
Вы можете использовать учетные данные помощников.
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 с обычными учетными данными:
- Напишите файл конфигурации SSH, который содержит
Host
,IdentityFile
для ключа развертывания, может бытьUserKnownHostsFile
и, возможно,User
(хотя я думаю, что вам это не нужно). - Напишите сценарий оболочки оболочки SSH, который практически
ssh -F /path/to/your/config $*
- 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 для его кеширования. Вот соответствующие ссылки:
- Настройка командной строки для работы с двухфакторной аутентификацией (найдите раздел под названием "Как это работает для 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.
- Настройте диспетчер учетных данных 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
- Зайдите в репозиторий и запустите
git fetch
- Выбирать
Device code
- Перейдите по ссылке и введите код, указанный в выводе.
Двухфакторная аутентификация изменила способ аутентификации пользователей на веб-сайтах, но 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 и введете свое имя пользователя / пароль, она будет сохранена.