Git постоянно просит у меня пароль

Я уже некоторое время пользуюсь Git, но постоянные запросы на ввод пароля приводят меня в движение.

Я использую Mac OS X и GitHub, и я настроил Git и мои SSH-ключи в соответствии с инструкциями на странице GitHub Set Up Git.

Я также добавил ключ github SSH в свою цепочку ключей Mac OS X, как упоминалось на странице парольных фраз ключа GitHub SSH. Мой открытый ключ зарегистрирован в Git.

Тем не менее, каждый раз, когда я пытаюсь Git pull, мне приходится вводить свое имя пользователя и пароль. Есть ли что-то кроме ключа SSH, который мне нужно настроить для этого?

Ответы

Ответ 1

Я думаю, что у вас неправильный URL репозитория Git.

Откройте .git/config и найдите раздел [remote "origin"]. Убедитесь, что вы используете SSH:

ssh://[email protected]/username/repo.git

Вы можете увидеть SSH URL на главной странице вашего репозитория, если вы нажмете Clone или загрузите и выберите ssh.

И НЕ https или git:

https://github.com/username/repo.git
git://github.com/username/repo.git

Теперь вы можете проверить с помощью только ключа SSH вместо имени пользователя и пароля.

Если Git жалуется, что 'origin' has already been added, откройте файл .config и отредактируйте часть url = "..." после [remote origin] как url = ssh://github/username/repo.git

Ответ 2

Настройка credential.helper

На OS X (теперь macOS), запустите это в Терминале:

git config --global credential.helper osxkeychain

Это позволяет Git использовать файл Keychain.app для хранения имени пользователя и пароля и для получения ключевой фразы для вашего личного ключа SSH из цепочки для ключей.

Для Windows используйте:

git config --global credential.helper wincred

Поиск проблемы

Если помощник по учетным данным Git настроен правильно, macOS сохраняет ключевую фразу в цепочке для ключей. Иногда связь между SSH и парольными фразами, хранящимися в цепочке для ключей, может разорваться. Запустите ssh-add -K или ssh-add ~/.ssh/id_rsa чтобы ssh-add ~/.ssh/id_rsa добавить ключ в ssh-add ~/.ssh/id_rsa ключей.

macOS v10.12 (Sierra) меняется на SSH

Для macOS v10.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 представлял диалоговое окно с запросом вашей парольной фразы и предлагал возможность сохранить ее в цепочке для ключей. Этот интерфейс был объявлен устаревшим некоторое время назад и был удален.

Ответ 3

Это случилось со мной, когда я обновил MacOS до версии 10.12 (Sierra). Похоже, агент SSH был очищен при обновлении.

$ ssh-add -L
The agent has no identities.

Просто запущенный ssh-add обнаружил мою существующую личность. Я ввел пароль, и было хорошо, чтобы пойти снова.

Ответ 4

Используйте это: Замените github.com на соответствующее имя хоста

git remote set-url origin [email protected]:user/repo.git

Ответ 5

Как уже говорили другие, вы можете установить помощник кеша паролей. Я просто хотел опубликовать ссылку для других платформ, а не только для Mac. Я использую сервер Linux, и это было полезно: кэширование вашего пароля GitHub в 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)

Ответ 6

Также ищите, кто спрашивает вас о парольной фразе. Это Git или ваш агент SSH?

В моем случае каждый раз, когда я делал git pull он спрашивал меня:

Enter passphrase for key '/work/username/.ssh/id_rsa':

Так что я предположил, что это Git просит пароль. Поэтому я продолжал искать решения, но потом понял, что мой агент SSH отключился. Что можно исправить с помощью eval $(ssh-agent) и ssh-add как указано здесь.

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

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

# 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

Ответ 7

git config credential.helper store

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

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

git config --unset credential.helper

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

git config --global credential.helper store

Ответ 8

Руководство по Git в Windows и GitHub с использованием SSH для push/pull: Иллюстрированное руководство по Git в Windows

  1. Скачайте и установите PuTTY
  2. Установить переменную окружения 'GIT_SSH' = 'path\to\plink.exe' (в папке с установленной замазкой) - очень важно !!!
  3. Перезапустите Windows Explorer, чтобы переменные среды вступили в силу (нельзя перезапустить только командную строку)
  4. Запустите puttygen.exe для генерации нового ключа, скопируйте открытый ключ на сайт GitHub
  5. Сохраните этот новый закрытый ключ где-нибудь в безопасности на диске (предпочтительно не Dropbox)
  6. Запустите putty.exe и подключите SSH к github.co
  7. Быстро попасть в папку автозагрузки, запустив "shell: startup".
  8. Запустите свой закрытый ключ с Windows через Pageant. Создайте ярлык в папке автозагрузки с синтаксисом "путь\к\pageant.exe", "путь\к\частному ключу"
  9. Нам не нужно устанавливать параметр "puttykeyfile" внутри .git/config наших репозиториев
  10. Очень важно, что "URL-адрес клонирования SSH" GitHub используется, а не HTTPS.

Ответ 9

В Windows для Git 1.7. 9+ выполните следующую команду в командной строке, чтобы открыть файл конфигурации в текстовом редакторе:

    git config --global --edit

Затем в файле добавьте следующий блок, если его нет, или измените его соответствующим образом:

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred

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

Ответ 10

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

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

Я использовал его для Bitbucket и GitHub, он работает для обоих. Единственное, что вам нужно сделать, это 3600 в секундах. Увеличьте его до любой степени, которую вы хотите. Я изменил его на 259200 что составляет около 30 дней. Таким образом, я повторяю свой пароль каждые 30 дней или около того.

Ответ 11

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

Введите терминал:

echo "" > ~/.ssh/known_hosts

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

Ответ 12

Ответ 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 до curl, это не проблема; это сработает.

Ответ 13

Как указано выше static_rtti, измените

https://github.com/username/repo.git
git://github.com/username/repo.git

в

ssh://[email protected]/username/repo.git

Я сам изменил https в файле .git/config на ssh, но он все еще не работал. Тогда я увидел, что вы должны изменить github.com на [email protected]. Хороший способ получить действительный правильный URL-адрес - перейти на страницу своего проекта и нажать на эту ссылку:

Измените HTTPS на SSH, чтобы получить правильный URL

Затем добавьте этот URL в файл конфигурации.

Ответ 14

Я согласен с "codehugger" и, используя инструкцию "orkoden", она работала для меня - в NetBeans 7.3 - когда вы щелкаете правой кнопкой мыши по файлу и выбираете контекстное меню - push - открывается окно "push to remote" - есть два варианты здесь:

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

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

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

Ответ 15

Шаг 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:[email protected]/path_to_your_git.git

Ответ 16

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

  1. git credential-osxkeychain.

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

      git credential-osxkeychain erase
    

    или же:

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

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

    Смотрите: Обновление учетных данных из OS X 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 при переполнении стека.

Ответ 18

Наличие опечатки в URL заставит Git запрашивать у вас имя пользователя и пароль, глупый Git.

Он был протестирован на Kali Linux, Git версии 2.7.0,

Пытаться:

git clone https://github.com/thisrepodoesntexists/doesntexists.git

Ответ 19

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

Ответ 20

Я чувствую, что ответ, предоставленный static_rtti, в некотором смысле хакерский. Я не знаю, было ли это доступно ранее, но инструменты Git теперь предоставляют хранилище учетных данных.

Режим кэширования

$ git config --global credential.helper cache

Используйте режим "кэш", чтобы хранить учетные данные в памяти в течение определенного периода времени. Ни один из паролей никогда не хранится на диске, и они удаляются из кэша через 15 минут.

Режим магазина

$ git config --global credential.helper 'store --file ~/.my-credentials'

Используйте режим "Хранилище", чтобы сохранить учетные данные в виде простого текстового файла на диске, и они никогда не истекают.

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

Ссылка: 7.14 Git Tools - Хранение учетных данных

Ответ 21

Если Git запрашивает у вас имя пользователя и пароль каждый раз, когда вы пытаетесь взаимодействовать с GitHub, вы, вероятно, используете URL-адрес клонирования HTTPS для своего хранилища.

Использование удаленного URL-адреса HTTPS имеет ряд преимуществ: его проще настроить, чем SSH, и обычно он работает через строгие брандмауэры и прокси-серверы. Тем не менее, он также предлагает вам вводить учетные данные GitHub каждый раз, когда вы извлекаете или перемещаете хранилище.

Вы можете настроить Git для хранения вашего пароля. Для Windows:

git config --global credential.helper wincred