Git push требует имени пользователя и пароля

Я клонировал репозиторий git из моей учетной записи Github на свой компьютер.

Я хочу работать как с моим ПК, так и с ноутбуком, но с одной учетной записью Github.

Когда я пытаюсь нажать или вытащить из Github с помощью моего ПК, он требует имя пользователя и пароль, но не при использовании ноутбука!

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

1145
задан 03 июля '11 в 23:25
источник поделиться
20 ответов

Распространенной ошибкой является клонирование с использованием по умолчанию (HTTPS) вместо SSH. Вы можете исправить это, перейдя в свой репозиторий, нажав "Клонировать или загрузить", затем нажав кнопку "Использовать SSH" над полем URL и обновив URL-адрес удаленного источника, например, так:

git remote set-url origin git@github.com:username/repo.git

Это задокументировано на GitHub: переключение удаленных URL-адресов с HTTPS на SSH.

1653
ответ дан 04 июля '11 в 0:25
источник

Постоянная аутентификация с репозиториями Git,

Запустите следующую команду, чтобы включить кэширование учетных данных:

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

Использование также должно указывать кеширование expire,

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

После включения кэширования учетных данных он будет кэшироваться для 7200 секунд (2 часа).

209
ответ дан 17 февр. '15 в 16:30
источник

Я столкнулся с одной и той же проблемой, и самым простым решением было найти URL-адрес SSH вместо HTTPS:

ssh://git@github.com/username/repo.git

И не это:

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

Теперь вы можете проверить только SSH Key вместо username и password.

116
ответ дан 14 июня '12 в 10:19
источник

Помимо перехода на SSH, вы также можете использовать HTTPS, если не хотите вводить свой пароль в ясный текст. Поместите это в свой ~/.netrc, и он не будет запрашивать ваше имя пользователя/пароль (по крайней мере, на Linux и Mac):

machine github.com
       login <user>
       password <password>

Дополнение (см. второй комментарий VonC): в Windows имя файла %HOME%\_netrc.

Также прочитайте первый комментарий VonC в случае, если вы хотите зашифровать.

Другое дополнение (см. комментарий пользователя137717), которое вы можете использовать, если у вас git 1.7.10 или новее.

Загрузите свой пароль github в git с помощью помощника учетных данных:

Если вы клонируете репозитории GitHub с помощью HTTPS, вы можете использовать credential helper, чтобы сообщить git запомнить ваше имя пользователя GitHub и пароль каждый раз, когда он разговаривает с GitHub.

Это также работает на Linux, Mac и Windows.

110
ответ дан 19 янв. '13 в 22:08
источник

Для непосвященных, которые смущены предыдущими ответами, вы можете сделать:

git remote -v

который будет отвечать на что-то вроде

origin  https://yourname@github.com/yourname/yourrepo.git (fetch)
origin  https://yourname@github.com/yourname/yourrepo.git (push)

тогда вы можете запустить команду, которую предложили многие другие, но теперь вы знаете свое имя и ваш репозит сверху, поэтому вы можете просто вырезать и вставить yourname/yourrepo.git сверху в

git remote set-url origin git@github.com:yourname/yourrepo.git
73
ответ дан 13 февр. '14 в 20:22
источник

Если вы используете ssh и ваш закрытый ключ зашифрован парольной фразой, вам все равно будет предложено ввести пароль/пароль для секретного ключа при выполнении сетевых операций с Git, таких как push, pull и fetch.

Используйте ssh -a gent для сохранения пароля и пароля.

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

$ eval 'ssh-agent -s'
$ ssh-add

В Windows msysgit Bash вам нужно оценить вывод ssh-agent, но я не уверен, нужно ли вам делать то же самое в других средах разработки и операционных системах.

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

Убить агента

Когда вы закончите с терминальной сессией, вы можете выключить ssh-agent с флагом kill -k:

$ ssh-agent -k

Как объяснено в руководстве пользователя ssh-agent:

-k

Убить текущего агента (заданного переменной среды SSH_AGENT_PID).

Дополнительный тайм-аут

Кроме того, он может принимать необязательный параметр времени ожидания, например, так:

$ ssh-add -t <timeout>

где <timeout> имеет формат <n>h для <n> часов, <n>m для <n> минут и т.д.

Согласно ssh-agent Руководство пользователя:

-t life

Установите значение по умолчанию для максимального времени жизни идентификаторов, добавляемых к агенту. Время жизни может быть указано в секундах или в формате времени, указанном в sshd_config (5). Время жизни, указанное для идентификатора с помощью ssh -a dd (1), переопределяет это значение. Без этой опции максимальное время жизни по умолчанию - навсегда.

Смотрите эту страницу для большего количества форматов времени.

Предупреждение о безопасности для пользователей Cygwin

Пользователи Cygwin должны знать о потенциальной угрозе безопасности при использовании ssh -a gent в Cygwin:

люди должны быть осведомлены о потенциальных опасностях ssh -a, уязвимых под cygwin [1], хотя при локальном netstat и удаленном сканировании портов не похоже, что порт, указанный в /tmp/ssh- foo, доступен любому...?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

И по приведенной ссылке:

однако, обратите внимание, что доменные сокеты cygwin unix являются ФУНДАМЕНТАЛЬНО НЕДОСТАТОЧНЫМИ, и поэтому я настоятельно ОБЯЗУЮСЬ использовать ssh -a благородно под cygwin.

когда вы запускаете ssh -a gent под cygwin, он создает сокет AF_UNIX в /tmp/ssh-$USERNAME/. под cygwin сокеты AF_UNIX эмулируются через сокеты AF_INET. Вы можете легко увидеть это, если загляните в файл /tmp/ssh-$USERNAME/agent-socket-* через блокнот. вы увидите что-то вроде

!<socket >2080

затем запустите netstat -a и удивитесь! у вас есть какая-то программа, слушающая порт 2080. она ssh -a. когда ssh получает вызов RSA от сервера, он ссылается на соответствующий /tmp/ssh-$USERNAME/agent-socket-* (в нашем случае под cygwin это означает, что он откроет соединение с localhost:2080) и запрашивает ssh [ CN01] обрабатывает запрос RSA с помощью имеющегося у него закрытого ключа, а затем просто передает ответ, полученный от ssh -a gent, на сервер.

под unix такой сценарий работает без проблем, потому что ядро unix проверяет разрешения, когда программа пытается получить доступ к сокету AF_UNIX. Однако для сокетов AF_INET соединения являются анонимными (читай "небезопасно"). Представьте, что у вас есть Cygwin SSH -a, работающий без перебоев. злонамеренный хакер может портировать вашу коробку, найти открытый порт, используемый Ssh -a, открыть соединение с вашим SSH-сервером, получить от него запрос RSA, отправить его на ваш SSH -a через открытый порт, который он нашел, получить ответ RSA, отправьте его на ssh сервер и вуаля, он успешно вошел на ваш сервер как вы.

51
ответ дан 21 авг. '13 в 5:54
источник

Источник: Настройка Git

Следующая команда сохранит ваш пароль в памяти на некоторое время.
(Для git 1.7.10 или новее.)

$ git config --global credential.helper cache
# Set git to use the credential memory cache

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)
44
ответ дан 01 сент. '13 в 5:55
источник

Когда вы используете https для git pull и push, просто config remote.origin.url для вашего проекта, чтобы избежать ввода имени пользователя (или/или пароля) каждый раз, когда вы нажимаете.

Как настроить remote.origin.url:

Url format:
    https://{username:password@}github.com/{owner}/{repo}

Parameters in url:
* username
    optional, the username to use when need authentication,
    if specified, no need to enter username again when need authentication,
    don't use email, use your username that has no "@", otherwise the url can't be parsed correctly,
* password
    optional, the password to use when need authentication,
    if specified, no need to enter password again when need authentication,
    tip:
        this value is stored as plain text, so for security concern, don't specify this param,
* 

e.g
    git config remote.origin.url https://eric@github.com/eric/myproject


@Update - используя ssh

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

Грубые шаги:

  • Создайте ssh-ключи, используя команду, например ssh-keygen в linux, в windows msysgit предоставите похожие команды.
  • Храните закрытый ключ на локальном компьютере в правильном месте, например ~/.ssh. И добавьте его в ssh-агент через команду ssh-add.
  • Загрузите открытый ключ на сервер git.
  • Измените remote.origin.url репозитория git на стиль ssh, например git@gitlab.com:myaccount/myrepo.git
  • Затем, когда вы тянете или нажимаете, вам не нужно вводить имя пользователя или пароль.

Советы:

  • Если в вашем ssh-ключевом слове есть фраза, вам необходимо ввести его при первом использовании ключа после каждого перезапуска вашего компьютера по умолчанию.

@Update - Переключение между протоколами https и ssh.

Просто изменить remote.origin.url будет достаточно или вы можете напрямую отредактировать repo_home/.git/config, чтобы изменить значение (например, используя vi в linux).

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

например

[remote "origin"]
        url = git@gitlab.com:myaccount/myrepo.git
        # url = https://myaccount@gitlab.com/myaccount/myrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
28
ответ дан 25 дек. '13 в 18:42
источник

Вы можете кэшировать свой пароль GitHub в Git:

Просто следуйте инструкциям из официальной документации github .

Следуя инструкциям из приведенной выше ссылки, вы можете нажать/вытащить/от своего репо, не набирая свое имя пользователя/пароль каждый раз.

15
ответ дан 19 дек. '14 в 8:29
источник

Вот еще один вариант:

Вместо того чтобы писать

git push origin HEAD

Вы могли бы написать:

git push https://user:pass@yourrepo.com/path HEAD

Очевидно, что для большинства оболочек это приведет к кэшированию пароля в истории, так что имейте это в виду.

5
ответ дан 24 апр. '18 в 20:05
источник

Для меня работала редактирование .git/config и использование

[remote "origin"]
        url = https://<login>:<password>@gitlab.com(...).git

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

5
ответ дан 31 июля '16 в 21:25
источник

В основном у вас есть два варианта.

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

Если вы создали новый .pub файл для своего ПК и хотите обрабатывать компьютеры как разные пользователи, вам необходимо зарегистрировать новый .pub файл на веб-сайте github.

Если это все еще не работает, возможно, это связано с тем, что ssh не настроен правильно и что ssh не удается найти местоположение ваших ключей. Попробуйте

ssh -vv username@github.com

Чтобы получить дополнительную информацию, почему SSH не работает.

4
ответ дан 04 июля '11 в 0:32
источник

Обновление для HTTPS:

Github запустил новую программу для Windows, которая хранит ваши учетные данные, когда вы используете HTTPS:

Для использования:

Загрузите программу из здесь

После запуска программы он отредактирует ваш файл .gitconfig. Перепроверьте, если он отредактировал правильный .gitconfig, если у вас их несколько. Если он не изменил правильную, добавьте следующее к вашему .gitconfig

[credential]
    helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'

Обратите внимание на размыкание строки после [credential]. Это необходимо.

Откройте клиент командной строки и попробуйте git push origin master один раз. Если он запрашивает у вас пароль, введите его, и вы закончите. Пароль сохранен!

4
ответ дан 05 апр. '13 в 9:02
источник

У меня была такая же проблема.

поэтому измените файл .git/config из моего проекта

url = https://github.com/<your-user-here>/<your-repo-here>

to

url = git@github.com:<your-user-here>/<your-repo-here>

и добавьте открытый ключ ssh в профиль git, который находится в настройке.

для открытого ключа ssh

cat ~/.ssh/id_rsa.pub
2
ответ дан 09 июня '15 в 8:42
источник

Для пользователей Windows git: После запуска git config --global credential.helper store, если он все еще запрашивает пароль, вам лучше проверить, куда записывается конфигурация. используя эту команду

git config --list --show-origin

В моем случае, вручную отредактируйте файл конфигурации 'C:\Program Files\Git\mingw64\etc\gitconfig', добавив следующий текст, все работает.

[credential] helper = store

2
ответ дан 30 авг. '18 в 12:11
источник

Вам нужно выполнить 2 шага -

1) git remote remove origin
2) git remote add origin git@github.com:NuggetAI/nugget.git

Обратите внимание, что URL-адрес git - это ssh URL, а не https-URL. Вы можете выбрать его здесь.

enter image description here

0
ответ дан 11 июня '18 в 23:58
источник

Если ключ ssh или.netrc не работает для вас, тогда другое простое, но менее безопасное решение, которое может работать для вас, - это git-credential-store - Помощник для хранения учетных данных на диске.

git config --global credential.helper store

По умолчанию учетные данные будут сохранены в ~/.git-credentials. Он будет создан и записан.

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

0
ответ дан 12 апр. '18 в 13:12
источник

Вот что сработало для меня:

git remote set-url origin https://username@github.com/username/reponame.git

Пример:

git remote set-url origin https://jsmith@github.com/jsmith/master.git
0
ответ дан 09 дек. '18 в 20:30
источник

Как говорили многие пользователи, вам просто нужно изменить URL вашего git-репозитория с https на SSH.

Если вы не сгенерировали SSH-ключ на своей машине, то вам придется это сделать.

Так же, как дополнительная информация, после выполнения этого изменения я все еще получал ту же ошибку: "Отказано в доступе".

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

Итак, мне просто нужно было открыть оболочку git и выполнить там команду ngh, вставлять фразу SSH в запрос каждый раз, когда она его запрашивала, и "вуаля"... Это просто отлично работало!

0
ответ дан 03 апр. '18 в 17:16
источник

Если вы используете git (например, git bash) под Windows (и если вы не хотите переключаться с https на ssh)

Вы также можете использовать https://github.com/Microsoft/Git-Credential-Manager-for-Windows

Это приложение будет хранить имя пользователя и пароль для вас...

-1
ответ дан 11 июня '14 в 16:08
источник

Другие вопросы по меткам или Задайте вопрос