github: Немає підтримуваних методів аутентифікації


98

Я використовую github і успішно додавав і синхронізував файли на своєму ноутбуці в минулому.

з недавнього часу я почав отримувати " фатальну помилку PuTTY: відключено: немає доступних підтримуваних методів аутентифікації " після запуску:

git pull master master (або push)

проте

ssh git@github.com повертає правильну відповідь: ПОМИЛКА: Привіт ім'я користувача! Ви успішно пройшли автентифікацію, але GitHub не надає доступ до оболонки. Підключення до github.com закрите.

після копання по github я знайшов цей морс:

Немає доступних підтримуваних методів аутентифікації Ви повинні знати про змінну середовища GIT_SSH, яку git використовує для пошуку вашого ssh-говорячого клієнта, якщо ssh не працює для вас. Установка git може використовувати plink.exe (через GIT_SSH) для здійснення автентифікації. Якщо так, переконайтеся, що у вас запущено pageant.exe, і ключ, створений для github, завантажений у нього. Це дає ключ до plink.exe; без нього відбудеться вищевказана помилка.

не впевнений, що таке plink.exe або peagant.exe .. і той факт, що ssh git@github.com, здається, підтверджує автентифікацію, змушує мене замислитися, що тут найкраще рішення .. Я, звичайно, не хочу надмірно ускладнювати налаштування, якщо ні необхідні.

Відповіді:


101

Ви можете створити файл з назвою ".profile" у своєму домашньому каталозі, для мене це C: \ Users \ [user]

Всередині цього файлу введіть такий рядок коду:

GIT_SSH="/usr/bin/ssh.exe"

Це встановить змінну середовища GIT_SSH для використання ssh-клієнта, включеного до git.

Сценарій .profile виконується при запуску командного рядка Git Bash.

Редагувати: це мій .profile. При першому запуску командного рядка git він запитає про ваш пароль, а потім запам'ятовуватиме його з тих пір, поки ви не перезавантажите комп'ютер. Дуже зручно, тому вам не доведеться постійно вводити свій пароль щоразу, коли ви хочете щось зробити.

SSH_ENV="$HOME/.ssh/environment"
GIT_SSH="/usr/bin/ssh.exe"

function start_agent {
echo "Initializing new 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;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cygwin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi

8
+1 У мене не було нічого, крім проблем, коли я використовував Putty / Pageant для ssh-sх потреб git. Використання вбудованого клієнта ssh творить чудеса. Це пояснює, чому ssh git@github.com повертається штрафом, якщо виконати його самостійно, але дозволити git використовувати налаштовані інструменти (Putty / Pageant) не робить.
enriquein

14
Для мене це просто GIT_SSH = "/ bin / ssh.exe" (для Windows). Дякую!
Мартін Конічек

1
@Justin Ви використовуєте підказку mingw32?
Рекс Морган

2
Використовуючи cygwin в Windows 7, вищевказана відповідь спрацювала, але мені потрібно GIT_SSHбуло, .bash_profileа не.profile
Гейб

2
У моєму випадку з Windows 10, що використовує Git Bash, цеGIT_SSH="D:\Program Files\Git\usr\bin\ssh.exe"
PaulH

31

Використання TortoiseGit

TortoiseGit> Налаштування ... Мережа ... Клієнт SSH: C:\Program Files\Git\usr\bin\ssh.exe

Розташування моє змінюється. На одному комп’ютері він знаходивсяC:\Program Files (x86)\Git\bin\ssh.exe

черепаха


5
Дякую. це спрацювало. Примітка: можливо, вам доведеться полювати навколо, де саме знаходиться "ssh.exe" на даній машині. для мене це було C: \ Program Files \ Git \ usr \ bin \ ssh.exe (можливо, на застарілій машині)
пестофаг

10

"... не впевнений, що таке plink.exe чи peagant.exe ..."

Оскільки ви запитуєте: plink & Pageant є частиною набору PuTTY, який є реалізацією SSH, який підтримує Linux та Windows і є повністю домінуючим у Windows.

SSH

Безпечна оболонка (SSH) - це протокол криптографічної мережі для забезпечення зв'язку даних. Він встановлює захищений канал по незахищеній мережі в архітектурі клієнт-сервер, з'єднуючи клієнтську програму SSH із SSH-сервером. Поширені програми включають віддалений вхід в командний рядок, віддалене виконання команд, але будь-яка мережна служба може бути захищена SSH.

якщо ви коли-небудь використовували Telnet, це так (але більш безпечно): він дозволяє віддалено отримувати доступ до оболонки bash (командного рядка) хоста Linux.

PuTTY

PuTTY - це вільний емулятор терміналу з відкритим кодом, послідовна консоль та програма передачі мережевих файлів. Він підтримує кілька мережевих протоколів, включаючи SCP, SSH, Telnet, rlogin ...

У Windows це домінуюче програмне забезпечення для віддаленого доступу до командного рядка хоста Linux за протоколом SSH (вище). У Windows розширення .exe призначені для виконання файлів. Тож ці примітки про plink.exe & pageant.exe, ймовірно, , не застосовуються, якщо ви працюєте в Linux . PuTTY включає

Плінк : інтерфейс командного рядка до спинки PuTTY

Pageant : агент аутентифікації SSH для PuTTY, PSCP та Plink

З ( http://en.wikipedia.org/wiki/Secure_Shell#Key_management )

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

Таким чином, github розміщується на машині Linux і використовує SSH для забезпечення з'єднання. SSH або автентифікується паролями, або ключами, багато хостів (github?) Автентифікуються лише за допомогою ключів. Ви, мабуть, налаштовуєте автентифікацію ключа. Клавіші та хости - це не один на один: ви можете мати два ключі для одного хоста та / або два хости для одного ключа, тому ними потрібно керувати. Якщо ви перебуваєте в Windows, то, можливо, до вашого сеансу SSH можна отримати доступ через планкість, а ваші ключі, ймовірно, керує Pageant.

Імпортуйте потрібний ключ щоразу, коли ви завантажуєте Pageant. Якщо ви дотримувались посібників, які говорили "імпортувати ваш ключ", і бачили, що він працює, але він не працює зараз, див. Розділ 9: Використання Pageant для аутентифікації .

Остання порада, якщо ви працюєте в Windows: у вас може бути кілька примірників пакету PuTTY, встановлених різними інструментами. Наприклад, TortoiseGit встановлює власну.


8

У мене виникла ця проблема, тому що мій GIT_SSHвказував на TortoiseSVN версію Plink.exe. Я змінив його, щоб вказати на версію TortoiseGit, перезапустив cmd і він працював.

Не можу точно пригадати, але версія TortoiseSVN могла бути 32-розрядною версією, а версія TortoiseGit 64-розрядною (розташована в Program Files, ні Program Files (x86)).

Двічі перевірте свій GIT_SSHenv var.

Я вважаю за краще використовувати git з нормальним cmd.exe( звичайно в Console2)


Ви правильно пам’ятаєте; У мене був той самий випуск, GIT_SSH вказував на 32-бітну версію TortoiseSVN TortoisePlink.exe. Переміщення його на версію TortoiseGit спрацювало.
nitwit

6

Для користувачів TortoiseGit в Windows

Спочатку я налаштовував більшість моїх сховищ Github / Bitbucket за допомогою URL-адрес сховища SSH, оскільки (спочатку) це був єдиний зручний спосіб запобігти TortoiseGit від запрошення вашого пароля під час кожної дії.

Але налаштування TortoiseGit таким чином завжди було болісно волосся. Кожного разу це займало години щоб правильно налаштувати, оскільки, здавалося, параметри встановлення за замовчуванням ніколи не працювали (навіть станом на 2016 рік, sheesh!)

Але TortoiseGit тепер має краще управління паролями для HTTPS, і Github фактично рекомендує використовувати URL-адреси HTTPS, де це можливо.

URL-адреса SSH: git@github.com:User/repo-name.git

URL-адреса HTTPS: https://github.com/User/repo-name.git

Перевагами HTTPS є:

  • Немає керування або генерування ключів SSH
  • Не потрібно pageant.exeпостійно працювати (що вимагає вашого пароля при кожному запуску)
  • Використовуючи TortoiseGit з Австралії, я виявляю, що клони через HTTPS в 5-10 разів швидше, ніж SSH

+ 'git config --global http.sslПідтвердити хибність'
Майк

5

Якщо ви використовуєте Pageant і отримуєте помилку, описану в питанні, після перезавантаження комп'ютера (або закриттям і повторним відкриттям Pageant):

Помилка може бути спричинена тим, що Pageant не завантажує ваш ключ GitHub SSH активно. За замовчуванням Pageant НЕ автоматично завантажує клавіші з попереднього сеансу при його запуску.

Щоб завантажити ключ:

  1. Відкрити Pageant. (У Windows, якщо Pageant запущений, він буде мати значок у системному треї. Двічі клацніть його.)
  2. Натисніть кнопку «Додати ключ» та продовжуйте додавати існуючий ключ GitHub SSH.

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

Кроки для цього (якщо ви вже налаштували Pageant для запуску при запуску Windows):

  1. Знайдіть ярлик, який використовує Windows для запуску Pageant при запуску Windows. (Це може бути в папці "Запуск", яку можна відкрити за допомогою Пуск> Виконати> shell:startup)
  2. У діалоговому вікні "Властивості" додайте повний шлях та ім'я файлу ключа SSH до поля "Ціль".

Довідка та повна інформація: http://blog.shvetsov.com/2010/03/making-pageant-automatically-load-keys.html


4

Проблема полягала в тому, що я намагався використовувати своє ім’я користувача github. Мабуть, коли ви використовуєте Github (чи це Git штука?) , Якщо ви використовуєте автентифікацію на основі ключів, вам потрібно встановити своє ім’я користувача git.

Я не впевнений, навіщо вам взагалі потрібне ім’я користувача - можливо, хтось більш обізнаний може це пояснити?


Під час клонування приватного сховища це буде така URL-адреса, як git@github.com: username / Repository.git. Я не зовсім впевнений у науці, що стоїть за цим, але, здається, git - це загальне ім’я користувача для кожного облікового запису Github
Зимовий

1
PLink / Pageant працює чудово. Це власне питання, і використовувати щось подібне ssh://git@github.com/myname/repo.gitбуде чудово. Хороша робота. Щодо чому, я припускаю, що це заблокувати безпеку. У користувача "git" вимкнено вхід, тому ніхто не може проникнути в систему таким чином. Вони повинні мати дійсний ключ, щоб навіть поговорити з Github, і коли у них є дійсний ключ, вони можуть зіставити його з користувачем, щоб увійти в нього.
ChokesMcGee

2

На моїй машині Windows 7 під керуванням Github для Windows з використанням git версії 1.8.3.msysgit.0. Я виявив, що оновлення моєї системної змінної середовища GIT_SSH до C: \ Program Files (x86) \ Git \ bin \ ssh.exe, здавалося, зробило трюк. Це також вирішило мою проблему, коли я зв'язався з gpo repo OpenShift.


2

Працював для мене в Windows 8: змінна GIT_SSH вказувала на plink.exe, змінила її в системних налаштуваннях, щоб вказати на бінарну ssh, і це виправило проблему. Щоб дізнатися повний шлях до ssh, запустіть:

where ssh

2

Щоб вирішити це питання, саме це я і зробив.

Я використовував Git Bash в Windows 10

Я запустив Pageant, натиснув клавішу Add,

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

перейшов до папки C: \ Users \ username \ .ssh і вибрав мій ключ

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

Потім я намагаюся зробити git push, і це спрацювало цього разу.


Пам'ятайте, що вам, мабуть, доведеться робити це кожного разу, коли ви перезавантажуєте ПК з Windows - ви можете помістити Pageant у свою папку запуску у вигляді ярлика з правильним аргументом командного рядка до файлу вашого приватного ключа, але якщо ви встановили пароль на своєму приватний ключ, коли ви його створили, вам потрібно запам’ятати правою кнопкою миші на піктограму Pageant в панелі інструментів, вибрати «Додати ключ» та заповнити її після кожного перезавантаження.
webbje


1

Я зіткнувся з цією ж проблемою, однак рішення GIT_SSH, здавалося, працювало для мене один раз. Після перезавантаження комп'ютера я зрозумів, що це щось інше, оскільки мені вдалося без проблем клонувати свої приватні сховища за допомогою Git Bash або Command Prompt, але не в Sublime Text 3 за допомогою плагіна SublimeGit. Моє рішення було простим і насправді є тим, що @BlueRaja - Danny Pflughoeft згадав але я подумав, що це може використовувати певний напрямок;

В основному вам просто потрібно відредагувати ~/.ssh/configта переконатися, що ім’я користувача є git. Ви також можете сказати йому використовувати спеціальний ключ SSH для Github - Мій ~/.ssh/configфайл виглядає наступним чином:

Host gh
    Hostname github.com
    User git
    IdentityFile ~/.ssh/github_rsa.pub

У мене є специфічний ключ для Github через кількість інших речей, які я роблю протягом дня, але якщо у вас є лише один, зазвичай це буде, ~/.ssh/id_rsa.pubяк пояснює Github тут .

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


1

Я отримав цю помилку під час використання TortoiseGit для клонування сховища з GitHub. Виправлено натисканням кнопки "Завантажити ключ шпаклівки" та вибору файла ключа (* .pkk) у діалозі "Клон клонування".



0

У мене виникла ця проблема (прямий ssh ​​спрацював, але тягнути git не вдалося) через те, що моє дистанційне управління git не було таким, яким я вважав це.

Так, так, я знаю, що це дурна помилка, але це трапляється і це варто перевірити.

Використовуйте git remote -v


0

У мене була подібна проблема після оновлення GitExtensions до версії 3.3.0.7719

Якось це змінило мої налаштування аутентифікації, щоб використовувати PuTTY замість OpenSSH.

У цій версії ось меню, яке я використовував для ввімкнення OpenSSH знову:

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

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