Git продолжает запрашивать у меня пароль
Я уже некоторое время пользуюсь Git, но постоянные запросы пароля начинают приводить меня в движение.
Я использую OSX и Github, и я настроил Git и мои SSH-ключи в соответствии с инструкциями на странице GitHub Set Up Git. Я также добавил ключ github SSH в свою цепочку ключей Mac OSX, как упоминалось на странице парольных фраз ключа GitHub. Мой открытый ключ зарегистрирован в Git.
Тем не менее, каждый раз, когда я пытаюсь сделать git pull, мне приходится вводить свое имя пользователя и пароль. Есть ли что-то кроме ключа SSH, который мне нужно настроить для этого?
34 ответа
Я думаю, что у вас неправильный URL-адрес git-репо.
открыто .git/config
и найдите раздел [remote "origin"]. Убедитесь, что вы используете SSH
один:
ssh://git@github.com/username/repo.git
И НЕ https
или же git
один:
https://github.com/username/repo.git
git://github.com/username/repo.git
Теперь вы можете проверить только с SSH Key
вместо username
а также password
,
[Edit:] Если Git жалуется, что 'origin' has already been added
, Открой .config
файл и редактировать url = "..."
часть после [remote origin]
как url = ssh://github/username/repo.git
Настройка credential.helper
На OS X (теперь macOS) запустите это в Терминале
git config --global credential.helper osxkeychain
Это позволяет git использовать Keychain.app для хранения имени пользователя и пароля, а также для получения ключевой фразы для вашего личного ключа ssh из цепочки для ключей.
Для окон используйте:
git config --global credential.helper wincred
Поиск проблемы
Если помощник по учетным данным git настроен правильно, macOS сохраняет фразу-пароль в цепочке для ключей. Иногда связь между ssh и парольными фразами, хранящимися в цепочке для ключей, может разорваться. Бежать ssh-add -K
или же ssh-add ~/.ssh/id_rsa
снова добавить ключ в связку ключей.
macOS 10.12 Sierra меняется на SSH
Для macOS 10.12 Sierra ssh-add -K
нужно запускать после каждой перезагрузки. Чтобы этого избежать ~/.ssh/config
с этим содержанием.
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
От ssh_config
man
страница на 10.12.2:
UseKeychain
В macOS указывает, должна ли система искать ключевые фразы в цепочке для ключей пользователя при попытке использовать определенный ключ. Когда пароль предоставляется пользователем, эта опция также указывает, должна ли эта фраза сохраняться в цепочке для ключей, как только она будет проверена на правильность. Аргумент должен быть "да" или "нет". По умолчанию "нет".
Apple добавила Technote 2449, который объясняет, что произошло.
До macOS Sierra ssh представлял диалоговое окно с запросом вашей парольной фразы и предлагал возможность сохранить ее в цепочке для ключей. Этот интерфейс был объявлен устаревшим некоторое время назад и был удален.
Это случилось со мной, когда я перешел на macOS Sierra. Похоже, агент ssh был очищен при обновлении.
$ ssh-add -L
The agent has no identities.
Просто работает ssh-add
нашел мою существующую личность, ввел пароль и снова готов к работе.
Как уже говорили другие, вы можете установить помощник кеша паролей. Я просто хотел опубликовать ссылку для других платформ, а не только для Mac. Я использую сервер Linux, и это было полезно: https://help.github.com/articles/caching-your-github-password-in-git/
Для Mac:
git credential-osxkeychain
Окна:
git config --global credential.helper wincred
Linux:
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)
Используйте это: замените github.com на соответствующее имя хоста
git remote set-url origin git@github.com:user/repo.git
Также ищите, кто спрашивает вас о парольной фразе. Это мерзавец или твой агент SSH?
В моем случае каждый раз, когда я делал git pull
это спрашивало меня:
Enter passphrase for key '/work/username/.ssh/id_rsa':
Поэтому я предположил, что это был мерзавец, спрашивающий пароль. Поэтому я продолжал искать решения, но потом понял, что мой агент SSH отключился. Который можно исправить используя eval 'ssh-agent -s'
а также ssh-add
как указано здесь.
Это была довольно глупая ошибка, которую я совершил, но опубликовал ее здесь, на всякий случай, если это поможет кому-то сэкономить время от лая неправильного дерева, как я.
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
Используйте следующую команду, чтобы увеличить время ожидания, чтобы вы могли на некоторое время повторно ввести пароль
git config --global credential.helper 'cache --timeout 3600'
Я использовал его для Bitbucket и Github, он работает для обоих. Единственное, что вам нужно сделать, это 3600
в секундах, увеличьте его в той степени, в которой вы хотите. Я изменил его на 259200
Который около 30 дней. Таким образом, я повторяю свой пароль каждые 30 дней или около того.
В Windows для git 1.7.9+ выполните следующую команду в командной строке, чтобы открыть файл конфигурации в текстовом редакторе:
git config --global --edit
Затем в файле добавьте следующий блок, если его нет, или отредактируйте его соответствующим образом.
[credential "https://giturl.com"]
username = <user id>
helper = wincred
Сохраните и закройте файл. Вам нужно будет предоставить данные только один раз после вышеуказанного изменения.
Руководство по git на windows и Github с использованием SSH для push / pull http://nathanj.github.io/gitguide/tour.html
- Скачать и установить замазку
- Установить переменную среды 'GIT_SSH' = 'path\to\plink.exe' (в папке с установленной замазкой) - ОЧЕНЬ ВАЖНО!!!
- Перезапустите WINDOWS EXPLORER, чтобы переменные Env вступили в силу (не может только перезапустить командную строку)
- Запустите puttygen.exe для создания нового ключа, скопируйте ключ PUBLIC на сайт Github.
- Сохраните этот новый ЧАСТНЫЙ ключ в безопасном месте на диске (предпочтительно не в Dropbox)
- Запустите putty.exe и подключите SSH к github.co
- Быстро попасть в папку автозагрузки, запустив "shell:startup". 8 Запустите свой закрытый ключ с окнами через конкурс. Создайте ярлык в папке автозагрузки с синтаксисом "путь \ к \pageant.exe", "путь \ к \ частному ключу"
- Нам не нужно устанавливать параметр "puttykeyfile" внутри.git / config наших репозиториев
- ОЧЕНЬ ВАЖНО, что "URL-адрес клонирования SSH" Github используется, а не Https
В подсистеме Windows для Linux (WSL) это было единственное работающее решение:
eval
`ssh-agent` ; ssh-add ~/.ssh/id_rsa
Проблема заключалась в том, что ssh-agent не был должным образом зарегистрирован в WSL.
Git предложит вам пароль, если вы используете https
протокол. Если вы используетеssh
, он выполнит аутентификацию с использованием вашего закрытого ключа вместо запроса пароля. ( https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account)
Вот как это исправить:
git remote -v
Это покажет URL-адрес происхождения. И вы заметитеhttps
в этом URL. (Пример: https://github.com/PrestaShop/PrestaShop.git)
Теперь вам нужно сначала просто удалить это и добавить URL-адрес с помощью ssh
git remote remove origin
git remote add origin git@github.com:PrestaShop/PrestaShop.git
Если вы хотите, чтобы Git не всегда запрашивал учетные данные для входа в ваш репозиторий GitHub, это можно легко сделать.
Использование SSH вместо HTTPS
Вы можете обновить исходный пульт с помощью SSH вместо HTTPS"
git remote set-url origin git@github.com:username/your-repo.git
Настройте Git для хранения вашего пароля и имени пользователя
Вот как вы можете заставить Git хранить имя пользователя и пароль:
git config --global credential.helper store
Затем сохраните имя пользователя и пароль для сеанса:
git config --global credential.helper cache
Я чувствую, что ответ, предоставленный static_rtti, в некотором смысле хакерский. Не знаю, было ли это доступно раньше, но инструменты Git теперь предоставляют хранилище учетных данных.
Режим кэширования
$ git config --global credential.helper cache
Используйте режим "кэш", чтобы хранить учетные данные в памяти в течение определенного периода времени. Ни один из паролей никогда не сохраняется на диске, и они удаляются из кэша через 15 минут.
Режим магазина
$ git config --global credential.helper 'store --file ~/.my-credentials'
Используйте режим "хранилище", чтобы сохранить учетные данные в виде простого текстового файла на диске, и они никогда не истекают.
Я лично использовал режим магазина. Удалил репо, клонировал его, а затем один раз пришлось ввести свои учетные данные.
Ссылка: https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage
Если Git запрашивает у вас имя пользователя и пароль каждый раз, когда вы пытаетесь взаимодействовать с GitHub, вы, вероятно, используете URL-адрес клонирования HTTPS для своего хранилища.
Использование удаленного URL-адреса HTTPS имеет ряд преимуществ: его проще настроить, чем SSH, и обычно он работает через строгие брандмауэры и прокси-серверы. Тем не менее, он также предлагает вам вводить учетные данные GitHub каждый раз, когда вы извлекаете или перемещаете хранилище.
Вы можете настроить Git для хранения вашего пароля. Для окон:
git config --global credential.helper wincred
У меня такая же проблема. Связка ключей MacOS Mojave продолжает запрашивать кодовую фразу. Ваш id_rsa должен быть зашифрован парольной фразой для безопасности. Затем попробуйте добавить его в связку ключейssh-add -K ~/.ssh/id_rsa
Если ваш ключ находится в другой папке, чем ~/.ssh, замените его на правильную папку.
Keychain теперь знает ваш ssh-ключ, надеюсь, теперь все работает.
Если вы все еще сталкиваетесь с проблемой, попробуйте
1. brew install keychain
2. echo '/usr/local/bin/keychain $HOME/.ssh/id_rsa' >> ~/.bash_profile
echo 'source $HOME/.keychain/$HOSTNAME-sh' ~/.bash_profile
3. ssh-add -K ~/.ssh/id_rsa
Надеюсь, теперь это должно сработать.
Я полагаю, что вы исправили свою проблему, но я не вижу здесь решения, которое мне помогло, так что вот оно.
Введите в терминале:
echo "" > ~/.ssh/known_hosts
Это опустошит ваш known_hosts
файл, и вам придется добавить каждый хост, который вы использовали и подключились, но это решило проблему.
Вот решение этой проблемы:
git remote -v
Это отобразит URL-адрес источника. Если он начинается с , нам нужно удалить этот URL-адрес и заменить его URL-адресом для
git remote remove origin
git remote add origin git@github.com:PrestaShop/PrestaShop.git
Если после удаления и повторного добавления удаленного репозитория вы по-прежнему не можете отправить локальную ветку на GitHub, команда, указанная ниже, должна помочь решить эту проблему.
xpetta@host:~/home/xpetta$ git push
fatal: The current branch ABC-123 has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin ABC-123
Альтернативно вы можете открыть и найти[remote "origin"]
раздел и убедитесь, что используемый URL-адрес не начинается с, если он начинается сhttps
замените его URL-адресом из удаленного репозитория GitHub. То же самое относится и к другим услугам, перечисленным в.git/config
такие как выборка и тому подобное, необходимо заменить наssh
URL-адрес.
При запуске macOS Cataline 10.15 метод кеширования связки ключей у меня не работал. И я хотел использоватьhttps://
не ssh
Вот что у меня сработало:
git remote rm origin
git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git
Это должно работать и на GitLab
Убедитесь, что имя пользователя содержит адрес электронной почты, чтобы удалить @email
часть или вы получите сообщение об ошибке URL using bad/illegal format or missing URL
.
Надеюсь это поможет!
Ответ orkoden на использование цепочки для ключей с git в вашем терминале был неполным и вызывает ошибки. Вот что вам нужно сделать, чтобы сохранить имя пользователя и пароль, которые вы вводите в терминале в цепочке для ключей:
curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain
Затем введите
git config --global credential.helper osxkeychain
Если вы уже выполнили часть с помощью git config до curl, это не проблема, это сработает
Как указано выше static_rtti, измените
https://github.com/username/repo.git
git://github.com/username/repo.git
в
ssh://git@github.com/username/repo.git
Я сам изменил https в файле.git/config на ssh, но он все еще не работал. Затем я увидел, что вы ДОЛЖНЫ изменить github.com на git@github.com. Хороший способ получить действительный правильный URL-адрес - перейти на страницу своего проекта и нажать эту ссылку.
Измените HTTPS на SSH, чтобы получить правильный URL
Затем добавьте этот URL в файл конфигурации.
Шаг 1: проверьте ваш текущий конфиг
cat .git/config
Ты получишь:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/path_to_your_git.git
fetch = +refs/heads/*:refs/remotes/origin/*
[user]
name = your_username
email = your_email
[branch "master-staging"]
remote = origin
merge = refs/heads/master-staging
Шаг 2: удалите ваше удаленное происхождение
git remote rm origin
Шаг 3: добавьте удаленный источник обратно с вашим именем пользователя и паролем
git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git
Я согласен с "codehugger" и с помощью инструкции "orkoden" он работал для меня - на NetBeans 7.3 - когда вы щелкаете правой кнопкой мыши по файлу и выбираете контекстное меню - нажмите - открытое окно "push to remote" - есть 2 варианты здесь
origin:https://github.com/myaccount/myproject.git/
https://github.com/myaccount/myproject.git/
Как вы видите, разница в параметре источника в URL - вы не хотите выбирать эту опцию (1), вы хотите проверить опцию (2), и она прекрасно работает для меня. Я надеюсь, что это поможет кому-то.
Дунг Ле.
Если вы используете Windows, и это неожиданно начало происходить неожиданно на GitHub, это, вероятно, связано с недавней отключенной поддержкой Github устаревших криптографических алгоритмов на 2018-02-22, и в этом случае решение заключается в простой загрузке и установке. последняя версия либо полного Git для Windows, либо просто Git Credential Manager для Windows.
Существуют разные виды аутентификации в зависимости от вашей конфигурации. Вот несколько:
git credential-osxkeychain
,Если ваши учетные данные недействительны, удалите их:
git credential-osxkeychain erase
или же:
printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
Так что git больше не будет просить у вас разрешения на связку ключей. Затем настройте его снова.
Смотрите: Обновление учетных данных из OSX Keychain на GitHub
Ваш ключ SSH RSA.
Для этого вам нужно сравнить ваш SSH-ключ с тем, что вы добавили.
ssh-add -L
/ssh-add -l
если вы используете правильную личность.Ваша HTTPS-аутентификация (если вы используете
https
вместоssh
Протокол).использование
~/.netrc
(%HOME%/_netrc
в Windows), чтобы предоставить свои учетные данные, например,machine stash1.mycompany.com login myusername password mypassword
Узнайте больше: синхронизация с GitHub на SO
Если у вас настроен агент SSH, вы также можете добавить его в свой ~/.gitconfig
чтобы заставить git использовать SSH для всех репозиториев GitHub, а не HTTPS:
[url "ssh://git@github.com/"]
insteadOf = git://github.com/
insteadOf = https://github.com/
(Если вы в основном работаете с общедоступными репозиториями, вы также можете использовать pushInsteadOf
скорее, чем insteadOf
, так как чтение из публичного репо может выполняться без аутентификации).
Опечатка в URL заставит git запрашивать у вас имя пользователя и пароль, глупый git
протестировано на Linux Kali, Git версии 2.7.0
пытаться:
git clone https://github.com/thisrepodoesntexists/doesntexists.git
Прежде чем вы сможете использовать свой ключ с GitHub, выполните этот шаг в руководстве Тестирование вашего SSH-соединения:
$ ssh -T git@github.com
# Attempts to ssh to GitHub
В моем случае я всегда получал запрос на ввод пароля, когда пытался выбрать URL-адрес, как показано ниже:
git fetch http://username@gerrit-domainname/repositoryname refs/changes/1/12345/1 && git cherry-pick FETCH_HEAD
Этот URL-адрес хорошо работал, когда был выбран на другом компьютере. Однако, с моей стороны, когда я пытаюсь выбрать правильный пароль, я получал ошибку ниже:
remote: Unauthorized
remote: Authentication failed for http://username@gerrit-domainname
В моем конфигурационном файле git удаленный URL-адрес был таким, как показано ниже:
url = ssh://gerrit-domainname:8080/wnc
Решение:
я решил проблему сбоя аутентификации, указав пароль HTTP, который я нашел в
Моя учетная запись gerrit -> Настройки -> Пароль HTTP .
Пароль HTTP был чем-то вроде
Th+IsAduMMy+PaSS+WordT+RY+Your+OwNPaSs
который сильно отличался от моего фактического пароля
abc@12345
Примечание . Мой URL-адрес cherrpick начинается с. Итак, это решение может работать с git checkout / download, где URL-адрес начинается с
git fetch ...
Решение Microsoft Stack (Windows и Azure DevOps)
Сначала откройте .git/config
файл, чтобы убедиться, что адрес выглядит так:
protocol://something@url
Например.git/config для Azure DevOps:
[remote "origin"]
url = https://mystore@dev.azure.com/mystore/myproject/
fetch = +refs/heads/*:refs/remotes/origin/*
Если проблема не исчезнет, откройте диспетчер учетных данных Windows, щелкните сейф с именем "Учетные данные Windows" и удалите все учетные данные, связанные с git.
Теперь, когда вы в следующий раз войдете в git, он больше не исчезнет.