Visual Studio Code zawsze prosi o poświadczenia git

218

Zacząłem używać programu Visual Studio Code i próbowałem zapisać projekt testowy w GitHub , ale Visual Studio Code zawsze pyta o moje poświadczenia w GitHub .

Zainstalowałem na swoim komputerze GitHub Desktop, a także Git , już uruchomiłem:

 git config --global credential.helper wincred

ale nadal Visual Studio Code prosi o poświadczenia.

Jakaś pomoc?

oto mój plik .gitconfig znajdujący się w profilu użytkownika:

    [filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = ddieppa
[user]
    email = [email protected]
[credential]
    helper = wincred

Oto wyskakujące okna z pytaniem o poświadczenia:

wprowadź opis zdjęcia tutaj

Wprowadzam moje poświadczenia GitHub w wyskakującym okienku , ale nadal pojawia się ten błąd w oknie danych wyjściowych Git w programie Visual Studio Code :

remote: Anonymous access to ddieppa/LineOfBizApp.git denied.
fatal: Authentication failed for 'https://github.com/ddieppa/LineOfBizApp.git/'
ddieppa
źródło
jakiego adresu URL GItHub używasz? HTTP czy GIT (SSH)? Jeśli używasz adresu URL HTTP, musisz podać adres URL użytkownika i hasło. Lepiej użyj adresu URL GIT i dodaj swój publiczny klucz SSH do listy kluczy SSH użytkownika
yorammi
@yorammi Jestem nowy w pracy z git, więc zainstalowałem Github Desktop i Git i próbuję zapisać mój projekt za pomocą Visual Studio Code, więc nie wiem, co przekazuję. Skąd to wiem?
ddieppa,
@ddieppa GitHub Desktop ma sposób pracy z uwierzytelnianiem dwuskładnikowym za pomocą połączenia https. To jednak psuje inne narzędzia. Podobnie jak w odpowiedzi, musisz teraz zmienić pierwotny adres URL z https na ssh.
Lex Li,

Odpowiedzi:

157

Ostatnia aktualizacja: 05 marca 2019 r

Po 98 opiniach, myślę, że muszę udzielić prawdziwej odpowiedzi z wyjaśnieniem.

Dlaczego kod VS prosi o hasło? Ponieważ VSCode uruchamia funkcję automatycznego pobierania, podczas gdy serwer git nie ma żadnych informacji autoryzujących twoją tożsamość. Dzieje się tak, gdy:

  • Twoje repozytorium git ma httpszdalny adres URL. Tak! Ten rodzaj pilota absolutnie zapyta Cię za każdym razem. Tutaj nie ma wyjątków! (Możesz wykonać tymczasową sztuczkę, aby buforować autoryzację jako rozwiązanie poniżej, ale nie jest to zalecane).
  • Twoje repozytorium git ma sslzdalny adres URL, ALE nie skopiowałeś swojego klucza publicznego ssh na serwer git. Służy ssh-keygendo generowania klucza i kopiowania go na serwer git. Gotowe! To rozwiązanie pomaga także nigdy więcej nie wpisywać hasła na terminalu. Tutaj znajdziesz odpowiedź na dobrą instrukcję @Fnatical .

Zaktualizowana część na końcu tej odpowiedzi wcale tak naprawdę nie pomaga. (W rzeczywistości powoduje stagnację w przepływie pracy.) Zatrzymuje to, co się dzieje w VSCode i przenosi te zdarzenia do terminala.

Przepraszam, jeśli ta zła odpowiedź wpłynęła na ciebie bardzo długo.

-

oryginalna odpowiedź (zła)

Znalazłem rozwiązanie na dokumencie VSCode :

Wskazówka: Powinieneś skonfigurować pomocnika poświadczeń, aby uniknąć pytania o poświadczenia za każdym razem, gdy VS Code rozmawia z pilotami Git. Jeśli tego nie zrobisz, możesz rozważyć Wyłączenie automatycznego pobierania w menu ..., aby zmniejszyć liczbę otrzymywanych monitów.

Tak więc włącz pomocnika poświadczeń, aby Git zapisał twoje hasło na pewien czas w pamięci. Domyślnie Git będzie buforować twoje hasło przez 15 minut.

W Terminalu wprowadź następujące dane:

git config --global credential.helper cache
# Set git to use the credential memory cache

Aby zmienić domyślny limit czasu pamięci podręcznej haseł, wprowadź następujące dane:

git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

AKTUALIZACJA (jeśli oryginalna odpowiedź nie działa)

Zainstalowałem VS Code i konfiguruję to samo powyżej, ale jak powiedział @ddieppa, to też nie działało dla mnie. Próbowałem więc znaleźć opcję w Ustawieniach użytkownika i zobaczyłem „git.autofetch” = true, teraz ustaw to na false! Kod VS nie jest już wymagany do wielokrotnego wprowadzania hasła!

W menu kliknij Plik / Preferencje / Ustawienia użytkownika i wpisz te:

Umieść swoje ustawienia w tym pliku, aby zastąpić ustawienia domyślne

{
  "git.autofetch": false
}
Davuz
źródło
2
Próbowałem tego, ale nie działało dla mnie, nawet korzystam z tego: $ git config --global credential.helper wincred
ddieppa
Chociaż rozwiązanie automatycznego pobierania nie zatrzymuje stałego problemu z wyskakującymi oknami, nadal wymaga wprowadzenia poświadczeń przy każdym naciśnięciu i wyciągnięciu. Jeśli używasz komputera z http / s, poniższe rozwiązanie menedżera poświadczeń działa świetnie.
ruttopia
3
rzeczy nie powinny się pojawiać, jeśli nie zainicjowałeś akcji, szczególnie pytania o poświadczenia - skąd wiesz, że jest to bezpieczne, a nie fałszerstwo?
Anthony Johnston,
7
Proszę zachować ostrożność przy tym ustawieniu! To nie ma na celu pomóc ci w ogóle zapamiętać twoje dane uwierzytelniające. Mówi o automatycznej pomocy w git-fetch. Więcej informacji na ten temat znajduje się na stronie atlassian.com/git/tutorials/syncing#git-fetch . Jeśli chodzi o przechowywanie poświadczeń, użyj polecenia git config --global credential.helper cache. Więcej informacji można znaleźć na stronie git-scm.com/book/gr/v2/Git-Tools-Credential-Storage .
Wdzięczny
7
Sugerowanie wyłączenia automatycznego pobierania jest w porządku jako opcja „zostaw mnie w spokoju”. Ale jest to podobne do powiedzenia „Jeśli twoje oprogramowanie nie działa, po prostu przestań go używać”. Ważne jest, aby ludzie zrozumieli różnicę. Sugerowałbym, aby w części „AKTUALIZACJA” tej odpowiedzi było napisane „JEŚLI TO NIE DZIAŁA” i wyjaśnić, że możesz sprawić, że przestanie Ci przeszkadzać bez faktycznego rozwiązania problemu. Część odpowiedzi powyżej AKTUALIZACJA jest w rzeczywistości poprawna (przynajmniej po skorzystaniu z linku do dokumentacji zadziałało dla mnie)
Don
67

Powinieneś być w stanie ustawić swoje poświadczenia w następujący sposób:

git remote set-url origin https://<USERNAME>:<PASSWORD>@bitbucket.org/path/to/repo.git

Możesz uzyskać zdalny adres URL w następujący sposób:

git config --get remote.origin.url

yohosuff
źródło
5
Jeśli mam hasło w @, to jaki będzie adres URL?
Suvonkar
To naprawdę fajny sposób. Jedno pytanie, gdzie te poświadczenia są zapisywane w lokalnym systemie plików?
Teoman shipahi
1
W pliku .git \ config.
yohosuff
Zwróć także uwagę, że <HASŁO> jest opcjonalne, jeśli nie chcesz zapisywać hasła na dysku lokalnym i nadal będziesz o to proszony.
Ben Barreth,
Możesz także udostępnić osobisty token dostępu do używania hasła, w ten sposób nie ujawniasz swojego prawdziwego hasła do konta, prawdopodobnie przechowywanego w postaci zwykłego tekstu. Możesz także łatwo usunąć postanowienie, jeśli chcesz lub jeśli uważasz, że twój system został utracony lub zagrożony.
CTS_AE
55


Działa to dla mnie: 1. Ustaw hepler poświadczeń do przechowywania
$ git config --global credential.helper store
2. następnie sprawdź, czy chcesz:
$ git config --global credential.helper store

Prosty przykład przy użyciu git bash cytowanego tutaj (działa tylko dla bieżących repozytoriów, użyj --globaldla wszystkich repozytoriów )

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: < type your username >
Password: < type your password >

[kilka dni później]
$ git push http://example.com/repo.git
[twoje dane uwierzytelniające są wykorzystywane automatycznie]

Działa również dla VS Code.

Bardziej szczegółowy przykład i zaawansowane użycie tutaj .

Uwaga: nazwa użytkownika i hasła nie są szyfrowane i przechowywane w formacie zwykłego tekstu, więc używaj go tylko na komputerze osobistym.

Vaibhav Vishal
źródło
2
Nie mam pojęcia, dlaczego ta pamięć podręczna po prostu nie chce pracować dla mnie na Ubuntu 18.04 i kodzie vs. storezrobił to
D. Dan
1
bardzo nie bezpieczne. zamiast tego użyj pamięci podręcznej. jeśli Twój „osobisty” komputer zostanie zhakowany, twoje dane uwierzytelniające git również mogą zostać zhakowane ..
Hypersoft Systems
1
pamięć podręczna zapisuje dane w pamięci, nie jest to rozwiązanie długoterminowe. Nie będziesz musiał wprowadzać nazwy użytkownika i hasła za każdym razem, ale nadal będziesz musiał go wpisywać dość często.
Vaibhav Vishal
1
Najbardziej podoba mi się ta odpowiedź. Nie chcę otrzymywać monitu o podanie nazwy użytkownika / hasła za każdym razem, gdy wypycham kod do źródła (tj. GitLab) za pomocą VS Code
Sean McCarthy
Nadal twierdzę, że ta metoda jest niebezpieczna. poświadczenia są przechowywane w pliku `~ / .git-credentials`, który może zostać wykorzystany w przypadku naruszenia bezpieczeństwa systemu. Lepsza zmiana httpscelu sshi kluczy ssh jako alternatywę.
Mohith7548
21

Poniższe kroki przeprowadzą Cię przez:

  1. Generuj klucze SSH (bez hasła **)
  2. Dodaj klucz publiczny wygenerowany w kroku 1 do swojego repozytorium Git
  3. Potwierdź, że powyższe kroki zostały pomyślnie zakończone
  4. Dokonaj pierwszego zatwierdzenia (bez konieczności podawania nazwy użytkownika / hasła)

** Generowanie kluczy SSH bez hasła jest nierozsądne, jeśli praca jest szczególnie wrażliwa.

System operacyjny - Fedora 28 | Edytor - VS Code v1.23.0 | Repozytorium - Git

Wygeneruj klucze SSH:

  • ssh-keygen -t rsa -C "[email protected]"
  • Wprowadź plik, w którym chcesz zapisać klucz : Naciśnij Enter
  • Wprowadź hasło : Naciśnij Enter
  • Wprowadź ponownie to samo hasło : Naciśnij Enter

Po wykonaniu powyższych kroków lokalizacja twojego klucza publicznego zostanie pokazana w oknie terminala. Jeśli aktualnie zalogowanym użytkownikiem jest „bob”, lokalizacją Twojego klucza publicznego będzie /home/bob/.ssh/id_rsa.pub

Skopiuj i zaimportuj klucz publiczny do GitHub:

  • cat /home/bob/.ssh/id_rsa.pub

  • Skopiuj do schowka cały klucz publiczny, który jest teraz wyświetlany w oknie terminala

  • Wejdź na https://github.com i zaloguj się
  • Kliknij ikonę użytkownika w prawym górnym rogu ekranu i wybierz Ustawienia
  • Kliknij klucze SSH i GPG
  • Kliknij Nowy klucz SSH
  • Wpisz tytuł, wklej klucz publiczny skopiowany do schowka w pierwszym punkcie wypunktowania i kliknij Dodaj klucz SSH

Potwierdź powyższe kroki:

  • ssh -T [email protected]

  • yes

  • Cześć ! Pomyślnie się uwierzytelniłeś, ale GitHub nie zapewnia dostępu do powłoki.

Pierwsze zatwierdzenie / wypchnięcie bez konieczności wprowadzania nazwy użytkownika / hasła: -touch test.txt

  • git add test.txt

  • git commit- otwiera edytor, wpisz wiadomość i zapisz plik. Jeśli vi jest twoim edytorem, naciśnij ipo otwarciu pliku, wprowadź wiadomość, naciśnij esc, a następnie naciśnij, :xaby zapisać zmiany.

  • git push

Jedyny czkawka, jaką możesz napotkać, to próba połączenia SSH z GitHub. Ten link zapewni pewną pomoc -

Udanego polowania!

Fnatical
źródło
20

Spróbuj zainstalować „ Git Credential Manager dla Windows ” (i postępuj zgodnie z instrukcjami dotyczącymi konfigurowania menedżera poświadczeń ).

Gdy jest to wymagane w aplikacji korzystającej z Git (np. VS Code), „ magicznie ” otworzy wymagane okno dialogowe dla danych logowania Visual Studio Team Services.

Czerwony pies
źródło
3
Szkoda, że ​​nie było też „Git Credential Manager for Linux”. Och, czekaj, ssh-agentjuż biegnę . Ale VS Code wydaje się ignorować to w Linuksie.
wigy
to jest dla mnie najprostsze rozwiązanie. i działa świetnie! dzięki za zwrócenie na to uwagi
dapidmini,
20

Wszystko, co musiałem zrobić, to uruchomić polecenie:

git config --global credential.helper wincred

Następnie dwukrotnie zapytano mnie o hasło.

Następnym razem zadziałało bez pytania o hasło.

Iść do
źródło
2
Dzięki! Problem rozwiązany, a także ten !
Jeffrey Roosendaal,
4
W systemie Ubuntu użyj storezamiast wincred.
Cees Timmerman
1
To zadziałało dla mnie! Możesz także zrobić np. git config --global credential.helper 'cache --timeout==1209600'Aby trwał 2 tygodnie zamiast domyślnych 15 minut. Źródło: help.github.com/en/github/using-git/…
Andrew
1
^ Więcej informacji na ten temat można znaleźć tutaj: git-scm.com/docs/gitcredentials git-scm.com/docs/git-credential-cache git-scm.com/docs/git-credential-store store zapisze go na stałe w dysk. Również mój poprzedni komentarz zawiera błąd: nie używaj ==, używaj =. Za późno na edycję.
Andrew
18

Użyj ssh zamiast http / https.

Trzeba będzie zestaw kluczy SSH na lokalnym komputerze, przesłać je na serwer git i zastąpić postać url http://celu git://i nie będzie trzeba już używać haseł.

Jeśli nie możesz użyć ssh, dodaj to do swojej konfiguracji:

[credential "https://example.com"]
    username = me

dokumenty są tutaj .


Używanie klucza ssh w github


Po prostu wykonaj te czynności, a natychmiast skonfigurujesz swój klucz ssh:

  • Wygeneruj nowy klucz ssh (lub pomiń ten krok, jeśli masz już klucz)
    ssh-keygen -t rsa -C "your@email"

  • Po ustawieniu klucza w home/.sshkatalogu (lub Users/<your user>.sshpod Windows) otwórz go i skopiuj zawartość


Jak dodać klucz SH do konta Github?

  • Zaloguj się do konta github
  • Kliknij ranczer w prawym górnym rogu (Ustawienia)
    Konto github rozlicza się
  • Kliknij na SSH keys
    sekcja klucza ssh
  • Kliknij na Add ssh key
    Dodaj klucz ssh
  • Wklej swój klucz i oszczędzaj

I wszyscy macie zamiar iść :-)

CodeWizard
źródło
4
Powinieneś również wyjaśnić, jaka jest podstawowa przyczyna. W moim przypadku, ponieważ włączyłem uwierzytelnianie dwuskładnikowe, SSH jest jedynym sposobem na połączenie z repozytoriami. Każde połączenie https doprowadzi do takiego monitu.
Lex Li,
@codeWizard Nie pamiętam dokładnie, co się stało, ale kod VS działał dobrze, mam na myśli połączenie z repozytorium GitHub bez dodatkowej konfiguracji. Myślę, że problem polegał na tym, że zainstalowałem Git po Github Desktop, czy to możliwe?
ddieppa
VC może przechowywać swoje poświadczenia wewnętrznie, a po ponownej instalacji / aktualizacji git konfiguracja mogła zostać zmieniona. Nie jestem użytkownikiem VC, jestem facetem z UNIX, więc nie mogę przetestować tego na moim komputerze.
CodeWizard,
3
@codeWizard VS Code jest open source i wieloplatformowy, można go uruchomić w systemie Windows, MacOS lub Linux :), pracując na wariancie ssh i zobaczyć, co dostanę
ddieppa
1
Link do dokumentacji jest zepsuty.
Vishal,
14

Zasadniczo można korzystać z wbudowanych urządzeń do przechowywania danych logowania:

git config --global credential.helper store

Lub, jeśli korzystasz z systemu Windows, możesz użyć systemu poświadczeń:

git config --global credential.helper wincred

Lub, jeśli korzystasz z systemu MacOS, możesz użyć ich systemu danych logowania:

git config --global credential.helper osxkeychain

Pierwsze rozwiązanie jest optymalne w większości sytuacji.

Adam Erickson
źródło
6

Automatyczne uwierzytelnianie Git . Informacje o wersji v1.45 :

Uwierzytelnianie GitHub dla repozytoriów GitHub

Kod VS ma teraz automatyczne uwierzytelnianie GitHub przeciwko repozytoriom GitHub. Możesz teraz klonować, pobierać, wypychać do i z repozytoriów publicznych i prywatnych bez konfigurowania menedżera poświadczeń w systemie. Nawet polecenia Git wywoływane w terminalu zintegrowanym, na przykład git push, są teraz automatycznie uwierzytelniane na koncie GitHub.

Możesz wyłączyć uwierzytelnianie GitHub za pomocą tego git.githubAuthenticationustawienia. Możesz również wyłączyć integrację uwierzytelniania terminala z tym git.terminalAuthentication ustawieniem.

znak
źródło
Wspaniały! Wyłączenie tych dwóch ustawień w systemie Linux (Ubuntu 18.04 + KDE Plasma) naprawia obsługę poświadczeń. Te dwa włączone zostały zastąpione askpass = /usr/bin/ksshaskpassw moim, .gitconfigw wyniku czego za każdym razem dostawałem nazwę użytkownika i hasło. Prawdopodobnie zostanie to bardziej uprzywilejowane, ponieważ wersja 1.45 działa na większej liczbie komputerów.
Andrei Sinitson
4

W systemie Windows 10: przejdź do panelu sterowania / Menedżera poświadczeń / poświadczenia systemu Windows -> kliknij link git, -> edytuj -> zaktualizuj nowe hasło. To powinno działać

Meera
źródło
2

Użyj klucza SSH bez hasła.

Może dla niektórych jest to oczywiste (nie dla mnie). Nie rozwiązuje to również problemu, jeśli absolutnie potrzebujesz hasła, ale był to przyzwoity kompromis w mojej sytuacji na Macu.

adampfoster
źródło
2

Po krótkiej walce z czymś takim myślę, że wymyśliłem dobre rozwiązanie, zwłaszcza gdy mam wiele kont w GitHub i BitBucket. Jednak w przypadku VSCode ostatecznie skończyło się na uruchomieniu go z terminala Git Bash, dzięki czemu odziedziczył zmienne środowiskowe z sesji bash i wiedział, na którego ssh-agenta patrzeć.

Zdaję sobie sprawę, że to stary post, ale nadal bardzo starałem się znaleźć jedno miejsce, aby uzyskać potrzebne informacje. Ponadto od 2017 r. Ssh-agent ma możliwość monitowania o hasło tylko podczas próby uzyskania dostępu do repozytorium.

Tutaj umieszczam swoje ustalenia, jeśli ktoś jest zainteresowany:

ScubaManDan
źródło
1

Po tym artykule :

Możesz po prostu ustawić GIT_SSH env. var. do programu Putty's plink.exe. (Następnie użyj pageant.exe jako agenta autoryzacji)

Paul Paku
źródło
1

Rozwiąż problem, wykonując następujące czynności.

Odinstalowane oprogramowanie Vscode i git i ponownie zainstalowane to samo. Zmieniono adres URL klonowania repozytorium git z ssh na https.

Sundar
źródło
1

Miałem podobny problem w Visual Studio Code.

Rozwiązałem problem, zmieniając zdalny adres URL na https . (w pliku .git / config)

[remote "origin"]
    url = https://[email protected]/plesk-git/project.git

i również

git config --global credential.helper wincred

ściągnięty ponownie, wyskoczyło okienko poświadczeń systemu Windows, problemy rozwiązane.

Vland
źródło
0

Dla mnie skonfigurowałem moje zdalne repozytorium za pomocą klucza SSH, ale git nie mógł ich znaleźć, ponieważ zmienna środowiskowa HOMEDRIVE automatycznie ustawiała się na udział sieciowy z powodu polityki domeny mojej firmy. Zmiana tej zmiennej środowiskowej w mojej powłoce przed uruchomieniem code .spowodowała, że ​​VSCode odziedziczy prawidłową zmienną środowiskową i nie ma już błędów połączenia w oknie wyjściowym git.

Teraz muszę tylko wymyślić, jak zastąpić zasady domeny, więc HOMEDRIVE zawsze wskazuje mój c:\users\marvhenkatalog lokalny, który jest domyślną lokalizacją .sshkatalogu.

Marvhen
źródło
0

Udało mi się to zatrzymać, wykonując następujące kroki.

  1. Odinstaluj Git Desktop (nie jestem pewien, czy jest to konieczne)
  2. Odinstaluj Credentials Manager, cd "C:\Program Files\Git\mingw64\libexec\git-core"a następniegit-credential-manager.exe uninstall
  3. Zresetuj pomocnika poświadczeń, aby użyć WinCred git config --global credential.helper wincred
  4. Kod VS użytkownika do wypchnięcia niektórych zmian i ponownego wprowadzenia danych logowania.

UWAGA: Użyłem osobistego tokena dostępu jako mojego hasła.

Mick
źródło
0

Podobny problem rozwiązałem w prosty sposób:

  1. Przejdź do CMD lub terminalu
  2. Rodzaj git pull origin master . Zamień „origin” na swoją nazwę Remote
  3. Poprosi o poświadczenia. Wpisz to.

To wszystko. Rozwiązałem problem

Avinash
źródło
0

oprócz dodania powyższych wpisów konfiguracji ssh

jeśli Windows

Set-Service ssh-agent -StartupType Automatic 

w PowerShell teraz kod vs nie powinien monitować ...

ubreddy
źródło
0

w systemie Windows 10 naciśnij typ klucza systemu Windows i powinieneś zobaczyć „Menedżer poświadczeń” w Panelu sterowania, kliknij, aby otworzyć, a następnie usuń powiązane z nim dane uwierzytelniające zapisane w pamięci podręcznej, a następnie spróbuj ponownie, poprosi o podanie identyfikatora użytkownika klucz hasła w poprawnym haśle .

Stało się ze mną, kiedy zmieniłem hasło sieciowe

Rohit Paliwal
źródło
0

Zwykle uruchamiam to proste polecenie, aby zmienić zdalny adres URL git z https na ssh

git remote set-url origin [email protected]:username/repo-name-here.git
Ahmad
źródło