github: brak dostępnych obsługiwanych metod uwierzytelniania

98

używam github i w przeszłości pomyślnie dodawałem i synchronizowałem pliki na moim laptopie.

ostatnio zacząłem otrzymywać komunikat „ Błąd krytyczny PuTTY: Rozłączono: Brak dostępnych obsługiwanych metod uwierzytelniania ” po uruchomieniu:

git pull origin master (lub push)

jednak

ssh [email protected] zwraca poprawną odpowiedź: BŁĄD: Cześć, nazwa użytkownika! Udało Ci się uwierzytelnić, ale GitHub nie zapewnia dostępu do powłoki Połączenie z github.com zostało zamknięte.

po przekopaniu się na githubie znalazłem tego morcela:

Brak dostępnych obsługiwanych metod uwierzytelniania. Powinieneś być świadomy zmiennej środowiskowej GIT_SSH, która jest używana przez git do znalezienia twojego klienta mówiącego ssh, jeśli ssh nie działa dla ciebie. Instalacja git może wykorzystywać plik plink.exe (przez GIT_SSH) do przeprowadzenia uwierzytelnienia. Jeśli tak, upewnij się, że masz uruchomiony program Pageant.exe i załadowany do niego klucz utworzony dla github. Zapewnia to klucz do plink.exe; bez tego wystąpi powyższy błąd.

nie jestem pewien, co to jest plink.exe lub peagant.exe .. a fakt, że ssh [email protected] wydaje się poprawnie uwierzytelniać, sprawia, że ​​zastanawiam się, jakie jest tutaj najlepsze rozwiązanie .. z pewnością nie chcę nadmiernie komplikować mojej konfiguracji, jeśli nie niezbędny.

Sonic Soul
źródło

Odpowiedzi:

101

Możesz utworzyć plik o nazwie „.profile” w swoim katalogu domowym, dla mnie to C: \ Users \ [użytkownik]

Wewnątrz tego pliku umieść następujący wiersz kodu:

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

Spowoduje to ustawienie zmiennej środowiskowej GIT_SSH tak, aby używała klienta ssh dołączonego do git.

Skrypt .profile jest wykonywany po uruchomieniu wiersza poleceń Git Bash.

Edycja: to jest mój .profile. Zapyta Cię o hasło przy pierwszym uruchomieniu wiersza poleceń git, a następnie zapamięta je od tego momentu, aż do ponownego uruchomienia komputera. Jest to bardzo przydatne, dzięki czemu nie musisz za każdym razem wpisywać hasła, gdy chcesz coś zrobić.

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
Rex Morgan
źródło
8
+1 Nie miałem nic poza problemami podczas używania Putty / Pageant na potrzeby ssh git. Korzystanie z wbudowanego klienta ssh czyni cuda. To wyjaśnia, dlaczego ssh [email protected] zwraca dobrze, jeśli uruchomisz go samodzielnie, ale pozwolenie gitowi na użycie skonfigurowanych narzędzi (Putty / Pageant) nie.
enriquein
14
Dla mnie to po prostu GIT_SSH = "/ bin / ssh.exe" (w systemie Windows). Dzięki!
Martin Konicek
1
@Justin, czy używasz zachęty mingw32?
Rex Morgan
2
Używając cygwin w Windows 7, powyższa odpowiedź działała, ale potrzebowałem GIT_SSHdo .bash_profilei nie.profile
Gabe
2
W moim przypadku z Windows 10 korzystającym z Git Bash jest toGIT_SSH="D:\Program Files\Git\usr\bin\ssh.exe"
PaulH,
31

Korzystanie z TortoiseGit

TortoiseGit> Ustawienia ... Sieć ... Klient SSH: C:\Program Files\Git\usr\bin\ssh.exe

Lokalizacja moja zróżnicowana. Na jednym komputerze to byłoC:\Program Files (x86)\Git\bin\ssh.exe

tortoisegit

Joseph Dykstra
źródło
5
dzięki. to zadziałało. uwaga: może być konieczne wyszukanie dokładnego miejsca, w którym na danym komputerze znajduje się plik „ssh.exe”. dla mnie był to C: \ Program Files \ Git \ usr \ bin \ ssh.exe (prawdopodobnie na przestarzałej maszynie)
pestophagous
10

„... nie wiem, co to jest plink.exe lub peagant.exe ...”

Ponieważ pytasz: plink i korowód są częścią pakietu PuTTY, który jest implementacją SSH, która obsługuje systemy Linux i Windows i jest całkowicie dominująca w systemie Windows.

SSH

Secure Shell (SSH) to kryptograficzny protokół sieciowy do zabezpieczania komunikacji danych. Ustanawia bezpieczny kanał w niezabezpieczonej sieci w architekturze klient-serwer, łącząc aplikację kliencką SSH z serwerem SSH. Typowe aplikacje obejmują zdalne logowanie za pomocą wiersza poleceń, zdalne wykonywanie poleceń, ale każda usługa sieciowa może być zabezpieczona za pomocą protokołu SSH.

jeśli kiedykolwiek korzystałeś z Telnetu, jest tak (ale bezpieczniej): pozwala zdalnie uzyskać dostęp do powłoki bash (wiersza poleceń) hosta Linux.

Kit

PuTTY to darmowy emulator terminala typu open source, konsola szeregowa i aplikacja do przesyłania plików w sieci. Obsługuje kilka protokołów sieciowych, w tym SCP, SSH, Telnet, rlogin ...

W systemie Windows jest to dominujące oprogramowanie do zdalnego dostępu do wiersza poleceń hosta Linuksa w protokole SSH (powyżej). W systemie Windows rozszerzenia .exe dotyczą plików wykonywalnych. Więc te uwagi o plink.exe i pageant.exe prawdopodobnie nie mają zastosowania, jeśli jesteś w systemie Linux . PuTTY zawiera

Plink : interfejs wiersza poleceń do zaplecza PuTTY

Pageant : agent uwierzytelniania SSH dla PuTTY, PSCP i Plink

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

Gdy klucz publiczny znajduje się na zdalnym końcu, a pasujący klucz prywatny znajduje się na końcu lokalnym, wpisywanie hasła nie jest już wymagane ... dla dodatkowego bezpieczeństwa sam klucz prywatny można zablokować za pomocą hasła.

Tak więc github jest hostowany na maszynie z Linuksem i używa SSH do zabezpieczenia połączenia. SSH uwierzytelnia się za pomocą haseł lub kluczy, wiele hostów (github?) Uwierzytelnia się tylko za pomocą kluczy. Konfiguracja najwyraźniej próbuje uwierzytelnić się za pomocą klucza. Klucze i hosty nie są jeden do jednego: możesz mieć dwa klucze dla tego samego hosta i / lub dwa hosty dla tego samego klucza, więc należy nimi zarządzać. Jeśli pracujesz w systemie Windows, dostęp do sesji SSH prawdopodobnie uzyskuje się za pośrednictwem plink, a Twoje klucze są prawdopodobnie zarządzane przez Pageant.

Importuj klucz, którego potrzebujesz za każdym razem, gdy ładujesz Pageant. Jeśli postępowałeś zgodnie z instrukcjami, które mówiły „zaimportuj swój klucz” i zobaczyłeś, że zadziałał, ale teraz nie działa, zobacz Rozdział 9: Używanie Pageant do uwierzytelniania .

Ostatnia wskazówka, jeśli korzystasz z systemu Windows: możesz mieć wiele wystąpień pakietu PuTTY zainstalowanych przez różne narzędzia. Na przykład TortoiseGit instaluje własne.

woodvi
źródło
8

Doświadczyłem tego problemu, ponieważ GIT_SSHwskazywałem na wersję TortoiseSVN Plink.exe. Zmieniłem to, aby wskazywało na wersję TortoiseGit, ponownie uruchomiłem cmd i zadziałało.

Nie pamiętam dokładnie, ale wersja TortoiseSVN mogła być wersją 32-bitową, a wersja TortoiseGit była 64-bitowa (zlokalizowana w Program Files, nie Program Files (x86)).

Sprawdź GIT_SSHdokładnie swój plik env var.

Wolę używać gita z normalnymi cmd.exe(oczywiście w Console2)

vaughan
źródło
Pamiętasz poprawnie; Miałem ten sam problem, z GIT_SSH wskazującym na 32-bitową wersję TortoiseSVN TortoisePlink.exe. Przeniesienie go do wersji TortoiseGit działało.
nitwit
6

Dla użytkowników TortoiseGit w systemie Windows

Początkowo konfigurowałem większość moich repozytoriów Github / Bitbucket przy użyciu adresów URL repozytoriów SSH, ponieważ (pierwotnie) był to jedyny wygodny sposób, aby uniemożliwić TortoiseGit monitowanie o hasło przy każdej pojedynczej akcji.

Ale ustawienie TortoiseGit w ten sposób zawsze było strasznie bolesne. Za każdym razem poprawne skonfigurowanie zajmowało mi godziny , ponieważ domyślne opcje instalacji nigdy nie działały (nawet od 2016 r.).

Ale TortoiseGit ma teraz lepsze zarządzanie hasłami dla HTTPS, a Github faktycznie zaleca używanie adresów URL HTTPS, gdy tylko jest to możliwe.

URL SSH: [email protected]:User/repo-name.git

URL HTTPS: https://github.com/User/repo-name.git

Zalety protokołu HTTPS to:

  • Brak zarządzania lub generowania kluczy SSH
  • Nie ma potrzeby pageant.execiągłego działania (co wymaga podania hasła przy każdym uruchomieniu)
  • Używając TortoiseGit z Australii, stwierdzam, że klony przez HTTPS są 5-10 razy szybsze niż SSH
Simon East
źródło
+ 'git config --global http.sslVerify false'
Mike
5

Jeśli używasz Pageant i po ponownym uruchomieniu komputera (lub zamknięciu i ponownym otwarciu programu Pageant) pojawia się błąd opisany w pytaniu:

Błąd może być spowodowany tym, że Pageant nie ma aktywnie załadowanego klucza SSH GitHub. Domyślnie program Pageant NIE ładuje automatycznie kluczy z poprzedniej sesji podczas uruchamiania.

Aby załadować klucz:

  1. Otwórz Pageant. (W systemie Windows, jeśli program Pageant jest uruchomiony, będzie miał ikonę w zasobniku systemowym. Kliknij ją dwukrotnie).
  2. Kliknij przycisk Dodaj klucz i kontynuuj, aby dodać istniejący klucz GitHub SSH.

Aby uniknąć tego problemu w przyszłości, możesz skonfigurować program Pageant tak, aby automatycznie ładował klucz podczas uruchamiania. (Pageant automatycznie poprosi o podanie hasła, jeśli klucz jest chroniony hasłem).

Kroki, aby to zrobić (zakładając, że masz już program Pageant skonfigurowany do uruchamiania podczas uruchamiania systemu Windows):

  1. Znajdź skrót używany przez system Windows do uruchamiania programu Pageant podczas uruchamiania systemu Windows. (Może znajdować się w folderze Autostart, który można otworzyć za pomocą Start> Uruchom> shell:startup)
  2. W oknie dialogowym Właściwości skrótu dołącz pełną ścieżkę i nazwę pliku klucza SSH w polu „Cel”.

Odniesienie i pełne szczegóły: http://blog.shvetsov.com/2010/03/making-pageant-automatically-load-keys.html

Jon Schneider
źródło
4

Mój problem polegał na tym, że próbowałem użyć mojej nazwy użytkownika github. Najwyraźniej podczas korzystania z Github (czy jest to rzecz Git?) , Jeśli używasz uwierzytelniania opartego na kluczach, musisz ustawić swoją nazwę użytkownika na git.

Nie jestem pewien, dlaczego w ogóle potrzebujesz nazwy użytkownika - może ktoś bardziej kompetentny może to wyjaśnić?

BlueRaja - Danny Pflughoeft
źródło
Podczas klonowania prywatnego repozytorium byłby to adres URL, taki jak [email protected]: nazwa użytkownika / Repository.git. Nie jestem do końca pewien co do nauki, która za tym stoi, ale wygląda na to, że git to ogólna nazwa użytkownika dla każdego konta Github
zima
1
PLink / Pageant działa dobrze. To jest rzeczywisty problem i użycie czegoś podobnego ssh://[email protected]/myname/repo.gitbędzie działać świetnie. Dobra robota. Jeśli chodzi o powód, zakładam, że ma to na celu zablokowanie ochrony. Użytkownik „git” ma wyłączony login, więc nikt nie może włamać się w ten sposób do systemu. Muszą mieć ważny klucz, aby nawet rozmawiać z Githubem, a kiedy już mają ważny klucz, mogą dopasować go do użytkownika, aby się zalogować.
ChokesMcGee
2

Na moim komputerze z systemem Windows 7 i Github dla Windows używającym git w wersji 1.8.3.msysgit.0. Zauważyłem, że aktualizacja zmiennej systemowej GIT_SSH do C: \ Program Files (x86) \ Git \ bin \ ssh.exe wydaje się załatwić sprawę. To również rozwiązało mój problem z kontaktowaniem się z repozytorium git OpenShift.

atorres757
źródło
2

Pracowałem dla mnie w systemie Windows 8: zmienna GIT_SSH wskazywała na plik plink.exe, zmieniono ją w ustawieniach systemu, aby wskazywała na plik binarny ssh, i to rozwiązało problem. Aby znaleźć pełną ścieżkę do ssh, uruchom:

where ssh
Dmitriy
źródło
2

To właśnie zrobiłem, aby rozwiązać ten problem.

Używałem Git Bash w systemie Windows 10

Zacząłem Pageant, nacisnąłem klawisz Add,

wprowadź opis obrazu tutaj

przeszedł do folderu C: \ Users \ nazwa_użytkownika \ .ssh i wybrał mój klucz

wprowadź opis obrazu tutaj

Następnie próbuję wykonać git push i tym razem zadziałało.

Lismore
źródło
Pamiętaj, prawdopodobnie będziesz musiał to zrobić za każdym razem, gdy ponownie uruchomisz komputer z systemem Windows - możesz umieścić Pageant w folderze startowym jako skrót z poprawnym argumentem wiersza poleceń do pliku klucza prywatnego, ale jeśli ustawiłeś hasło na swoim klucz prywatny, kiedy go utworzyłeś, musisz pamiętać, aby kliknąć prawym przyciskiem myszy ikonę Pageant na pasku narzędzi, wybrać „Dodaj klucz” i wypełnić go po każdym ponownym uruchomieniu.
webbje
1

Napotkałem ten sam problem, jednak rozwiązanie GIT_SSH wydawało mi się działać raz. Po ponownym uruchomieniu komputera zdałem sobie sprawę, że to coś innego, ponieważ mogłem sklonować moje prywatne repozytoria bez problemu za pomocą Git Bash lub Command Prompt, ale nie w Sublime Text 3 z wtyczką SublimeGit. Moje rozwiązanie było proste i właściwie to @BlueRaja - wspomniał Danny Pflughoeft, ale pomyślałem, że przydałoby się jakiś kierunek;)

Zasadniczo wystarczy edytować ~/.ssh/configi upewnić się, że nazwa użytkownika to git. Możesz również powiedzieć mu, aby używał określonego klucza SSH dla Github - mój ~/.ssh/configplik wygląda następująco:

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

Mam konkretny klucz do Github ze względu na wiele innych rzeczy, które robię w ciągu dnia, ale jeśli masz tylko jeden, zwykle będzie to ~/.ssh/id_rsa.pubtak, jak wyjaśnia Github tutaj .

Wiem, że każdy ma inne rozwiązanie, ale zostawię to tutaj dla każdego, kto może napotkać ten artykuł bez poprawki. Powodzenia!

Zimowy
źródło
1

Otrzymałem ten błąd podczas używania TortoiseGit do klonowania repozytorium z GitHub. Naprawiono przez kliknięcie „Załaduj klucz Putty” i wybranie pliku klucza (* .pkk) w oknie dialogowym klonowania Git.

Zymotik
źródło
0

Mam ten problem (bezpośrednie ssh działało, ale git pull nie powiodło się), ponieważ mój pilot Git nie był tym, czym myślałem, że jest.

Tak, tak, wiem, że to głupi błąd, ale zdarza się i warto to sprawdzić.

Posługiwać się git remote -v

cowlinator
źródło
0

Miałem podobny problem po aktualizacji GitExtensions do wersji 3.3.0.7719

W jakiś sposób przywrócił moje ustawienia uwierzytelniania, aby używać PuTTY zamiast OpenSSH.

W tej wersji tutaj jest menu, którego użyłem do ponownego włączenia OpenSSH:

wprowadź opis obrazu tutaj

wycierać
źródło