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_configman страница на 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

  1. Скачать и установить замазку
  2. Установить переменную среды 'GIT_SSH' = 'path\to\plink.exe' (в папке с установленной замазкой) - ОЧЕНЬ ВАЖНО!!!
  3. Перезапустите WINDOWS EXPLORER, чтобы переменные Env вступили в силу (не может только перезапустить командную строку)
  4. Запустите puttygen.exe для создания нового ключа, скопируйте ключ PUBLIC на сайт Github.
  5. Сохраните этот новый ЧАСТНЫЙ ключ в безопасном месте на диске (предпочтительно не в Dropbox)
  6. Запустите putty.exe и подключите SSH к github.co
  7. Быстро попасть в папку автозагрузки, запустив "shell:startup". 8 Запустите свой закрытый ключ с окнами через конкурс. Создайте ярлык в папке автозагрузки с синтаксисом "путь \ к \pageant.exe", "путь \ к \ частному ключу"
  8. Нам не нужно устанавливать параметр "puttykeyfile" внутри.git / config наших репозиториев
  9. ОЧЕНЬ ВАЖНО, что "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такие как выборка и тому подобное, необходимо заменить наsshURL-адрес.

При запуске 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 варианты здесь

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

Как вы видите, разница в параметре источника в URL - вы не хотите выбирать эту опцию (1), вы хотите проверить опцию (2), и она прекрасно работает для меня. Я надеюсь, что это поможет кому-то.

Дунг Ле.

Если вы используете Windows, и это неожиданно начало происходить неожиданно на GitHub, это, вероятно, связано с недавней отключенной поддержкой Github устаревших криптографических алгоритмов на 2018-02-22, и в этом случае решение заключается в простой загрузке и установке. последняя версия либо полного Git для Windows, либо просто Git Credential Manager для Windows.

Существуют разные виды аутентификации в зависимости от вашей конфигурации. Вот несколько:

  1. git credential-osxkeychain,

    Если ваши учетные данные недействительны, удалите их:

    git credential-osxkeychain erase
    

    или же:

    printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    Так что git больше не будет просить у вас разрешения на связку ключей. Затем настройте его снова.

    Смотрите: Обновление учетных данных из OSX Keychain на GitHub

  2. Ваш ключ SSH RSA.

    Для этого вам нужно сравнить ваш SSH-ключ с тем, что вы добавили. ssh-add -L/ssh-add -l если вы используете правильную личность.

  3. Ваша 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, он больше не исчезнет.

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