github: поддерживаемых методов аутентификации нет

98

Я использую github и в прошлом успешно добавлял и синхронизировал файлы на своем ноутбуке.

в последнее время я начал получать « Неустранимая ошибка PuTTY: отключено: поддерживаемые методы аутентификации недоступны » после запуска:

git pull origin 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, похоже, проходит аутентификацию правильно, заставляет меня задаться вопросом, какое здесь лучшее решение ... я, конечно, не хочу чрезмерно усложнять свою настройку, если нет нужно.

Sonic Soul
источник

Ответы:

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 для git ssh. Использование встроенного клиента ssh творит чудеса. Это объясняет, почему ssh git@github.com возвращает нормально, если вы выполняете его самостоятельно, но позволяя git использовать настроенные инструменты (Putty / Pageant), этого не происходит.
Энрикеин
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 (вероятно, на устаревшей машине)
pestophagous
10

"... не знаю, что такое plink.exe или peagant.exe ..."

Поскольку вы спрашиваете: plink и pageant являются частью пакета PuTTY, который представляет собой реализацию SSH, которая поддерживает Linux и Windows и полностью доминирует в Windows.

SSH

Secure Shell (SSH) - это криптографический сетевой протокол для защиты передачи данных. Он устанавливает безопасный канал в незащищенной сети в архитектуре клиент-сервер, соединяя клиентское приложение SSH с сервером SSH. Общие приложения включают удаленный вход в систему из командной строки, удаленное выполнение команд, но любую сетевую службу можно защитить с помощью SSH.

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

PuTTY

PuTTY - это бесплатный эмулятор терминала с открытым исходным кодом, последовательная консоль и приложение для передачи файлов по сети. Он поддерживает несколько сетевых протоколов, включая SCP, SSH, Telnet, rlogin ...

В Windows это доминирующее программное обеспечение для удаленного доступа к командной строке хоста Linux по протоколу SSH (см. Выше). В Windows расширения .exe предназначены для исполняемых файлов. Так что эти примечания о plink.exe и pageant.exe, вероятно , не применимы, если вы работаете в Linux . PuTTY включает

Plink : интерфейс командной строки для бэкэндов PuTTY

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

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

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

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

Импортируйте ключ, который вам нужен каждый раз при загрузке Pageant. Если вы следовали руководствам, в которых говорилось «импортируйте свой ключ», и увидели, что это работает, но сейчас не работает, см. Главу 9: Использование Pageant для аутентификации. .

Последний совет, если вы работаете в Windows: у вас может быть несколько экземпляров пакета PuTTY, установленных различными инструментами. Например, TortoiseGit устанавливает свой собственный.

Woodvi
источник
8

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

Я не могу точно вспомнить, но версия TortoiseSVN могла быть 32-битной версией, а версия TortoiseGit была 64-битной (находится в Program Files, а не Program Files (x86)).

Дважды проверьте свой GIT_SSHenv var.

Я предпочитаю использовать git в обычном режиме cmd.exe(конечно, в Console2)

Vaughan
источник
Вы правильно помните; У меня была такая же проблема, когда GIT_SSH указывал на 32-разрядную версию TortoiseSVN TortoisePlink.exe. Перенос его в версию TortoiseGit сработал.
nitwit
6

Для пользователей TortoiseGit в Windows

Первоначально я использовал для настройки большинства своих репозиториев Github / Bitbucket URL-адреса репозитория SSH, поскольку (изначально) это был единственный удобный способ предотвратить запрос пароля TortoiseGit для каждого отдельного действия.

Но установка TortoiseGit таким образом всегда была мучительно болезненной. Каждый раз, когда мне потребовались часы на правильную настройку у , поскольку параметры установки по умолчанию никогда не работали (даже в 2016 году, черт возьми!).

Но в 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.sslVerify false'
Майк
5

Если вы используете Pageant и получаете сообщение об ошибке, описанное в вопросе, после перезагрузки компьютера (или иного закрытия и повторного открытия Pageant):

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

Чтобы загрузить ключ:

  1. Открыть Конкурс. (В Windows, если Pageant запущен, он будет иметь значок на панели задач. Дважды щелкните по нему.)
  2. Нажмите кнопку «Добавить ключ» и продолжите добавление существующего SSH-ключа GitHub.

Чтобы избежать этой проблемы в будущем, вы можете настроить 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 .

Я не уверен, зачем вам вообще нужно имя пользователя - возможно, кто-то более знающий сможет это объяснить?

BlueRaja - Дэнни Пфлугофт
источник
При клонировании частного репозитория это будет 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, похоже, помогло. Это также устранило мою проблему с обращением к репозиторию OpenShift git.

atorres757
источник
2

Работал для меня в Windows 8: переменная GIT_SSH указывала на plink.exe, изменил ее в настройках системы, чтобы указать на двоичный файл ssh, и это устранило проблему. Чтобы узнать полный путь к ssh, запустите:

where ssh
Дмитрий
источник
2

Я сделал это для решения этой проблемы.

Я использовал Git Bash в Windows 10

Я запустил Pageant, нажал кнопку «Добавить»,

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

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

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

Затем я пытаюсь сделать git push, и на этот раз он сработал.

Лисмор
источник
Помните, что вам, вероятно, придется делать это каждый раз при перезагрузке ПК с Windows - вы можете поместить Pageant в папку автозагрузки как ярлык с правильным аргументом командной строки для вашего файла закрытого ключа, но если вы установили пароль на своем закрытый ключ, когда вы его создали, вам нужно не забыть щелкнуть правой кнопкой мыши значок Pageant на панели инструментов, выбрать «Добавить ключ» и заполнить его после каждой перезагрузки.
webbje
1

Я столкнулся с той же проблемой, однако решение GIT_SSH, похоже, однажды сработало для меня. После перезагрузки компьютера я понял, что это что-то еще, так как я мог без проблем клонировать свои частные репозитории с помощью Git Bash или командной строки, но не в Sublime Text 3 с плагином SublimeGit. Мое решение было простым и на самом деле то, что @BlueRaja - Дэнни Пфлугхёфт но я подумал, что это может использовать какое-то направление;)

В основном вам просто нужно отредактировать ~/.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) в диалоге клонирования Git.

Зимотик
источник
0

У меня возникла эта проблема (прямой ssh ​​работал, но git pull не удалось) из-за того, что мой git remote не такой, как я думал.

Да, да, я знаю, что это глупая ошибка, но она бывает и стоит проверить.

Использовать git remote -v

ковбойник
источник
0

У меня была аналогичная проблема после обновления GitExtensions до версии 3.3.0.7719

Каким-то образом он вернул мои настройки аутентификации, чтобы использовать PuTTY вместо OpenSSH.

В этой версии вот меню, которое я использовал для повторного включения OpenSSH:

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

протереть
источник