Перехід до повернення Git Код помилки 403 фатальний: HTTP-запит не вдався


634

Мені вдалося клонувати копію цього репо за протоколом HTTPS. Я здійснив деякі зобов’язання і хочу відсунути на сервер GitHub. Використання Cygwin у Windows 7 x64.

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
error: The requested URL returned error: 403 while accessing https://MichaelDrog
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Також встановіть його в режимі багатослівної роботи. Я все ще досить збентежений.

C:\cygwin\home\XPherior\Code\lunch_call>set GIT_CURL_VERBOSE=1

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL connection using AES256-SHA
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
< WWW-Authenticate: Basic realm="GitHub"
<
* Ignoring the response-body
* Expire cleared
* Connection #0 to host github.com left intact
* Issue another request to this URL: 'https://MichaelDrogalis@github.com/dereker
dmann/lunch_call.git/info/refs?service=git-receive-pack'
* Couldn't find host github.com in the _netrc file; using defaults
* Re-using existing connection! (#0) with host github.com
* Connected to github.com (207.97.227.239) port 443 (#0)
* 0x23cb740 is at send pipe head!
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
* Authentication problem. Ignoring this.
< WWW-Authenticate: Basic realm="GitHub"
* The requested URL returned error: 401
* Closing connection #0
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL re-using session ID
* SSL connection using AES256-SHA
* old SSL session ID is stale, removing
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs HTTP/1.1
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

* The requested URL returned error: 403
* Expire cleared
* Closing connection #0
error: The requested URL returned error: 403 while accessing https://MichaelDrog
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Ось такі версії git and curl у мене є:

C:\Users\XPherior>git --version
git version 1.7.4.msysgit.0

C:\Users\XPherior>curl --version
curl 7.21.7 (amd64-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp
smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz

3
Подивіться на коментар, який слід розмістити як відповідь. Він працював з 1.7.1, також була проблема з підказками користувача / пароля. Належить до stackoverflow.com/a/9575906/805284 ...
sjas

2
перевірити, чи користувач читав / записував доступ до сховища
Céline Aussourd,

22
Надалі не вставляйте "Авторизація: Basic <stuff>", показуючи приклади заголовків http. Це легко base64 розшифрувати і отримати свій пароль. @mike: якщо ви не змінили свій пароль github після опублікування цього запитання, я б запропонував вам це зробити.
FlipMcF

4
@FlipMcF Спасибі людина. Не знав. Пароль змінено.
Майк

6
@Mike NP. Тепер я безсоромно просуваю маленький блог, про який я писав: goo.gl/bpae94
FlipMcF

Відповіді:


836

У мене просто така ж проблема і я лише з'ясував, що є причиною.

Здається, Github підтримує лише ssh спосіб читання та запису репо, хоча https спосіб також відображає "Читання та запис".

Тому вам потрібно змінити конфігурацію репо на вашому ПК на ssh:

  1. редагуйте .git/configфайл у каталозі репо
  2. знайти url=запис під розділом[remote "origin"]
  3. змінити його з url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.gitна url=ssh://git@github.com/derekerdmann/lunch_call.git. тобто змініть всі тексти перед @символом наssh://git
  4. Збережіть configфайл і закрийте. тепер ви можете використовувати git push origin masterдля синхронізації репо на GitHub

56
Це часто трапляється, коли ви клонуєтесь з адресою лише для читання git (що за замовчуванням, коли ви не ввійшли в систему) замість ssh читання + запису.
Nitrodist

43
Моє .git/configбуло більше схоже, url=https://github.com/mynickname/my_repo.gitале я також змінив це, як url=ssh://git@github.com/mynickname/my_repo.gitі це зробив трюк
Гійом Фландр,

12
Ви можете змінити URL-репо за допомогою git remote set-urlкоманди. Дивіться мою відповідь нижче.
фетш

7
або просто змінити його з командного рядка, використовуючиgit remote set-url <name> git@github.com:<username>/<repo>.git
iGbanam

42
Для тих, хто шукає не ssh рішення, перегляньте кілька інших відповідей тут. Додавання вашого імені користувача до URL-адреси https, здається, працює. (Змінити конфігурації URL , так що https: // @ github.com / ... це UNAME@github.com / ... )
Кир

431

Щоб напевно мати змогу ввійти за допомогою httpsпротоколу, спочатку слід встановити свій обліковий запис автентифікації на URI git Remote :

git remote set-url origin https://yourusername@github.com/user/repo.git

Тоді вам буде запропоновано пароль при спробі git push.

Фактично, це у форматі аутентифікації http. Ви також можете встановити пароль:

https://youruser:password@github.com/user/repo.git

Ви повинні знати, що якщо ви це зробите, ваш пароль github буде зберігатися в простому тексті у вашому каталозі .git, що, очевидно, небажано.


12
SSH заблокований на роботі, тому мені доведеться використовувати HTTPS. Додавання імені користувача виправляє мої проблеми.
Девід Пул

32
Це має бути прийнятою відповіддю. Немає причини вручну редагувати конфігураційний файл, коли в ньому є інтерфейс командного рядка.
Стів Беннетт

4
Також для мене цей спосіб ( ім'я користувача @ github ... ) запитав пароль і працював, тоді як ssh: // git @ github ... не вдалося очікувати відкритого ключа авторизації.
Стів Беннетт

1
працює і має бути прийнятою відповіддю! Особливо в умовах, коли ssh не працює, це шлях. Дякую!
АндреасЕК

3
@Achint - це формат аутентифікації. Ви також можете встановити свій пароль, https://youruser:password@github.com/user/repo.gitнезважаючи на незахищеність
Thiago Macedo

113

Одне невелике доповнення до відповіді Шона .

Замість редагування .git/configфайлу вручну ви можете використовувати git remote set-urlкоманду.

У вашому випадку це повинно бути:

git remote set-url origin ssh://git@github.com/derekerdmann/lunch_call.git

Я вважаю, що це простіше і чистіше, ніж возитися з крапковими файлами.


Я не знаю, чи це лише стара публікація, і Git змінився, але як сьогодні для вирішення проблеми мені довелося скористатися git remote set-url origin ssh://git@github.com:derekerdmann/lunch_call.gitдвокрапкою між github.com та назвою repo
KevinL

56

Відредагуйте .git/configфайл у каталозі репо

Знайдіть url=запис у розділі[remote "origin"]

Змініть його url=https://github.com/rootux/ms-Dropdown.gitна https://USERNAME@github.com/rootux/ms-Dropdown.git

де USERNAMEваше ім’я користувача github


Ця відповідь не стосувалася моєї проблеми. Моя URL-адреса .git/configвстановлено на ` github.com/myrepo/subproject ' .
kilojoules

Була ця проблема з Android Studio. Добре працює.
AndroidDev

46

Інші відповіді, які пропонують перейти на SSH, не пропускають суть. HTTPS підтримується, але ви повинні увійти разом із вами паролем GITHUB, а не вашою SSH-парольною фразою (саме це дало мені таку саму точну помилку).

У мене була така ж проблема, але переконайтесь, що я використовував свій фактичний пароль GitHub у вікні пароля терміналу, виправляв рішення без зміни конфігурації чи вдачі до SSH.

Причиною, що це важливо зазначити, є те, що багато державних установ (наприклад, моя школа) заблокують SSH, але дозволять HTTPS (це єдина причина, що я почав клонувати над HTTPS в першу чергу).

Сподіваємось, що допоможе хто-небудь інший із тим самим питанням ...


1
але чому? Мені цього не довелося робити. Чи закінчився термін дії сертифіката чи щось?
Туфір

Не впевнений, я не фахівець, саме так я змусив його працювати в моєму випадку :)
BMB

Сам @Thufir. Я поняття не маю, чому це раптом спрацювало.
Нік Меннінг

Я просто входжу в систему, використовуючи своє ім’я користувача та пароль у браузері. АЛЕ коли я намагаюся, git pushмені запропонують au і p, і в результаті відмовлено в дозволі .... Ви знаєте, чого я пропускаю?
Омар

26

Така ж помилка та рішення в Mac OS X.

Все працювало нормально, поки я не створив новий акаунт на GitHub і спробував просунути

$ git push -u origin master

І отримала помилку:

віддалено: дозволу на NEWUSER / NEWREPO.git відмовлено OLDUSER. фатально: не вдається отримати доступ до " https://github.com/NEWUSER/NEWREPO.git/ ": запитувана URL-адреса повертається помилка: 403

Він повинен був виправитись, встановивши ім'я користувача для глобальної чи поточної репо

$ git config –-global user.name NEWUSER
$ git config user.name NEWUSER

Але це не сталося.

Я вирішив це, видаливши OLDUSER, пов’язаний з GitHub, із програми Keychain Access у розділі Пароль. Тоді команда push вдалася успішно.

$ git push -u origin master

довідник


Видалення OLDUSER з програми Keychain Access працювало на мене
Augusto Triste

1
Я отримав ту саму помилку, але з іншої, але пов’язаної з цим причини, яка вимагала іншого рішення. Мене намагалися підштовхнути до репо, де у мене немає доступу до запису (я не є співробітником). Це було більше через те, що я не знаю, як зробити внесок у репо, яке не є моїм. Я думав, що я можу просто створити нову гілку, а потім зробити запит на тягу. Не так. Спершу я повинен роздрібнити репо, внести зміни на вилку, потім зробити запит на тягу з мого роздвоєного репо на початковий репо. Можливо, з моєї сторони помилкова помилка, але якщо я можу це зробити, то я впевнений, що інші n00bs могли. :)
Нео

23

Якщо ви використовуєте Windows, іноді це може статися, оскільки Windows зберігає облікові дані для зовнішнього репо-репортажу (у нашому випадку github) у власному сховищі. І збережені в ньому облікові дані можуть відрізнятися від потрібних вам зараз.

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

Тому, щоб уникнути цієї проблеми, просто знайдіть github у цьому сховищі та видаліть збережені облікові дані. Після цього під час натискання git запитає ваші облікові дані та дозволить вам натиснути.


"Можливо, вам доведеться перевірити менеджера облікових даних Windows і видалити запис github у розділі control panel > user accounts > credential manager > Windows credentials > Generic credentials" подробиці з цього допису: stackoverflow.com/a/37450495
Мігель

Це працює для мене, я боровся майже 2 дні і нарешті прийшов до рішення. Дуже дякую.
Sufiyan Ansari

1
Ти врятував моє життя!
написатиToBhuwan

1
Я зіткнувся з цією проблемою вже більше місяця дякую
Самсон Нзукі

1
Геніальність. Дякую багато
Вінод Кумар

18

Це працює для мене -:

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

Сподіваюся, це допомагає


1
хороша робота. встановити користувача!
marlonpya

1
Це рішення допомогло з git v1.7 в CentOS 6.10 x86. Я очікував, що з'явиться запрошення до пароля (замість ключа SSH), і це було ( <username>@попередньо попередньо github.comу віддаленій URL-адресі). Дякую!
вулкан ворон

17

Я думаю, що @deepwaters отримав відповідь правильною для старих версій. URL-адреса HTTPS повинна мати ім’я користувача. У мене був git 1.7.0.4 і git push origin masterнавіть не запитав пароль, поки я не додав його.



11

Код 403 - "Заборонено". Сервер побачив ваш запит і відхилив його. Чи маєте ви дозвіл перейти до цього сховища?


1
У мене з другом є однакові проблеми. Репо є моє, і він не може натиснути. Як це виправити?
gibson

як отримати persmisson
Bawantha

9

Насправді у мене було дуже просте виправлення. Все, що я робив - це редагувати файл git config по-різному після клонування сховища. URL-адреса віддаленого джерела - це те, що вам потрібно відредагувати у файлі конфігурації за замовчуванням . Це повинно виглядати так, як видно нижче

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://*username*@github.com/*username*/*repository*.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

^ це (або будь-який із його варіантів нижче)
Остін Франція

Додавши ім'я користувача, перш ніж github.com виправив його.
Шейн

Вас вітають @ ÅdəəlÅhmåd. Підтримайте зусилля, підвищивши відповідь, щоб багато хто міг оцінити їх.
larrytech

8

Зрозумів це. Я клонував над HTTPS. Налаштування моїх загальнодоступних ключів SSH, клонування над SSH та натискання на SSH виправили це.


Хм-м-м ... але що, коли ви не можете використовувати нічого, крім https, наприклад, через корп-брандмауер? ... Згідно з блогом github, https-доступ був доданий до github саме для цієї мети?
філофель

1
Я насправді не знаю. Я завжди клоную над SSH зараз.
Майк

Тільки для нащадків (я помітив часову позначку), щодо коментаря філофеля: Ознайомтеся з моєю відповіддю, переліченою вище. У мене є те саме обмеження, яке ви згадали, у моїй школі, і я виявив, що я подаю неправильний пароль / фразу для запиту терміналу. Сподіваюся, це допоможе будь-яким іншим із тим самим питанням.
БМБ

8
  1. Натисніть на ваше сховище
  2. Праворуч натисніть "Налаштування"
  3. На панелі опцій ліворуч натисніть "Співробітники"
  4. Додайте ім’я людини, яку ви знаєте в GitHub
  5. Натисніть "Додати співробітників"

Після цього наш «Push to Git» спрацював чудово.


Дякую! дуже корисно!
sailfish009


7

Зробіть це для тимчасового виправлення

git push -u https://username:password@github.com/username/repo_name.git master


простий і працює
Баванта

6

Я зіткнувся з тією ж помилкою, і причина була дурною - у мене не було привілеїв, щоб взяти участь у вибраному сховищі. Я не знав, що мушу

  1. вилка спочатку вибраного проекту
  2. локально клонувати сховище
  3. здійснити мої зміни на місцях
  4. натисніть зміни на мій клон Github
  5. просити тягнути запит до вище за течією

як описано в https://help.github.com/categories/63/articles


1
Не дурно, це правильна відповідь для більшості учасників, які вперше публікують публічні сховища.
DaReal

5

Для тих, хто має дозвіл, відхилив помилку 403 під час використання ssh (згідно Xiao ) або http- адрес, спробуйте ці команди

>git config --global --unset-all credential.helper

>git config --unset-all credential.helper

з правами адміністратора

>git config --system --unset-all credential.helper

Тепер кожного разу Git запитуватиме логін та пароль. Збережіть їх git config --global credential.helper store.
CoolMind

4

змінити його з

url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.git 

до

url=ssh://git@github.com/derekerdmann/lunch_call.git

Це працює!

Не забудьте "git" перед "@".


Це працювало для мене (використовуючи CentOS Server із RStudio за проксі). Спершу встановіть проксі: git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:portПотім використовуйте команду git remote set-url originдля перемикання адреси.
Олександр Джордж

3

Для будь-кого цікавого, моя машина Mac проти lucid vm працювала з git 1.7.6 проти 1.7.0.4, і точно такий же репо був виштовхуваний від мого mac (новіший git), але не від VM

Та ж версія завитка. Можливо, деякі старіші версії git не підтримують https push?


Так, тут працює https push до github (навіть через проксі з паролем). Я використовую git 1.7.3. Для мене спочатку не вдалося, бо я ввів неправильний пароль.
guettli

9
Це працює для мене з git 1.7.1, але є одна річ, на яку ви також повинні звернути увагу (і це те, що я пропустив у першій спробі): Дайте ім’я користувача у HTTPS-URL, тобтоurl=https://username@github.com/username/repo.git
lwho

3

Додайте ім'я користувача як частину URL-адреси. Ця помилка трапляється через те, що команда git натискає http замість https. Тому встановіть URL-адресу

git remote set-url origin https://<username>@github.com/Path_to_repo.git

Після цього вам буде запропоновано ввести пароль:


3

Що для мене спрацювало:

Моє репо було вилкою і досі пов’язане з батьками репо.

git remote -v

Скажу вам, чи це ваше репо, чи ні.

git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git

Дозволяє вам налаштувати його на репо, а потім надати вам можливість натиснути.


3

Жодна з наведених відповідей не працювала для мого enterpriseоблікового запису GitHub. Виконайте ці кроки для натискання на шлях генерації ключів ssh.

Створіть репо, відвідавши свій git-акаунт.

Створити ключ ssh:

ssh-keygen -t rsa -C "your_email@example.com"

Скопіюйте вміст файлу ~ / .ssh / id_rsa.pub у ваші SSH ключі у налаштуваннях вашого акаунта GitHub. Тестовий ключ SSH:

ssh -T git@github.com
clone the repo:
git clone git://github.com/username/your-repository

Тепер CD у свою папку git clone та зробіть:

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

Тепер спробуйте відредагувати файл (спробуйте README) і виконайте:

git add -A
git commit -am "my update msg"
git push -u origin master

Оновлення: нова версія git, здається, рекомендує не мати жодного файлу під час створення нового репо. Тому зробіть порожнє репо.


2

Я зрозумів власну варіацію цієї проблеми.

Проблема полягала не в зміні протоколу з https на ssl, а натомість у встановленні глобального імені користувача та електронної пошти Github! (Я намагався перейти до приватного сховища.

git config --global user.email "your_github_email_@email.com"

git config --global user.name "Your full name"

Не працює для мене. Config було встановлено, використовувати github.com .. без '@' в ньому
SES


1

Я мав цю проблему прямо зараз, і виявилось, що у мого сервера /etc/resolver.conf файл був неправильний ip-адресу. Може допомогти іншим.


1

Це сталося зі мною, тому що мій співробітник несанкціоновано відключив сховище, з якого було розроблено цей сховище. Просто перевірте, чи справді існує оригінальний gpo (hub) repo.


1

Це може бути проблемою бухгалтерського обліку. Рахунок Github у власнику репо-версії (приватного) може не бути фінансовим. Я бачив це там, де термін дії кредитної картки клієнта закінчився.


1

те, що для мене працювало, змінюється з http на ssh:

git remote rm origin
git remote add origin git@github.com:username/repoName.git

потім перевірте це git remote -v


1

У мене було те саме питання. У мене випадок: я ініціалізував git repo локально, перш ніж створив його на github, потім спробував додати віддалену гілку. Я вирішив своє питання, змінивши порядок дій: створив репо на сайті github, а потім запросив його на місцевому рівні. Але справа не в тому, хто любить робити все з командного рядка як я.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.