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

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

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

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

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

19 ответов


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

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

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


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

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

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

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

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

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

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


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

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

а не так:

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

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


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

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

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

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

еще одно дополнение (см. user137717 комментарии), которые вы можете использовать, если у вас есть git 1.7.10 или новее.

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

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

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


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

git remote -v

, который ответит что-то вроде

origin  https://[email protected]/yourname/yourrepo.git (fetch)
origin  https://[email protected]/yourname/yourrepo.git (push)

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

git remote set-url origin [email protected]:yourname/yourrepo.git

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

используйте ssh-agent для сохранения пароля секретного ключа / пароля

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

$ eval `ssh-agent -s`
$ ssh-add

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

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

убить агент

когда вы закончите с вашей терминальной сессии, вы можете shutdown ssh-agent С флагом убийства -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

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

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

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

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

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

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

и привел ссылку:

однако обратите внимание, что сокеты домена unix cygwin являются принципиально Небезопасно и поэтому я сильно отбить использование ssh-агента под с Cygwin.

когда вы запускаете ssh-agent под cygwin, он создает сокет AF_UNIX в


источник: Настройка 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)

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

как в config remote.origin.url:

Url format:
    https://{username:[email protected]}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://[email protected]/eric/myproject


@Update-использование ssh

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

грубой шаги:

  • создать ssh ключи с помощью команды, e.g ssh-keygen на linux, на windows msysgit предоставить аналогичные команды.
  • держите закрытый ключ на локальной машине в правильном месте, e.g ~/.ssh. И добавьте его в ssh agent через .
  • загрузите открытый ключ на сервер git.
  • изменить remote.origin.url из репозитория git в ssh стиль, электронная.г [email protected]:myaccount/myrepo.git
  • потом, когда тянуть или толкать, нет необходимости вводить имя пользователя или пароль когда-либо.

советы:

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

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

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

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

Эл.г

[remote "origin"]
        url = [email protected]:myaccount/myrepo.git
        # url = https://[email protected]/myaccount/myrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

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

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

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


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

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

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


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

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

использование:

скачать программу здесь

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

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

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

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


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

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

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

Если это все еще не работает, это может быть потому, что ssh не настроен правильно и что ssh не может найти расположение ваших ключей. Попробуй!--2-->

ssh -vv [email protected]

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


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

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

git push origin HEAD

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

git push https://user:[email protected]/path HEAD

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


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

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

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

to

url = [email protected]:<your-user-here>/<your-repo-here>

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

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

cat ~/.ssh/id_rsa.pub

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

git config --list --show-origin

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

[credential] helper = store


Как многие пользователи уже сказал, Вы просто должны изменить свой repositorie в Git URL-адрес с HTTPS и SSH.

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

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

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

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


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

git config --global credential.helper store

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

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


необходимо выполнить 2 шага -

1) git remote remove origin
2) git remote add origin [email protected]:NuggetAI/nugget.git

обратите внимание, что url Git-это ssh url, а не url https .. Которые можно выбрать отсюда.

enter image description here


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

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

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