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



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



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



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



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

3685   19  

19 ответов:

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

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 one:

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 в случае, если вы хотите зашифровать.

еще одно дополнение (см. комментарий пользователя 137717) который вы можете использовать, если у вас есть 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-агент для сохранения пароля/пароля секретного ключа

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

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

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

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

убить агент

когда вы закончите с вашей терминальной сессии, вы можете выключить 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) переопределяет это значение. Без этот параметр максимальное время жизни по умолчанию-навсегда.

смотрите эту страницу для получения дополнительных форматов времени.

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

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

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

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

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

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

когда вы запускаете ssh-агент под 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: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://[email protected]/eric/myproject


@ Update-using ssh

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

грубой шаги:

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

советы:

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

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

просто изменить remote.origin.url будет достаточно, или вы можете редактировать repo_home/.git/config непосредственно для изменения значения (например, с помощью 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 знает, что вы тот же пользователь.

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

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

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>

до

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

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

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

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

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

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

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

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, а не https url .. Который вы можете выбрать здесь.

enter image description here

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

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

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

Comments

    Ничего не найдено.