Git na Bitbucket: zawsze pytany o hasło, nawet po przesłaniu mojego publicznego klucza SSH

180

Przesłana ~/.ssh/id_rsa.pubdo kluczy SSH Bitbucket jest jak wyjaśniono , ale Git wciąż pyta o hasło przy każdej operacji (na przykład git pull). Przegapiłem coś?

Jest to prywatne repozytorium (rozwidlenie prywatnego repozytorium innej osoby) i sklonowałem je w następujący sposób:

git clone [email protected]:Nicolas_Raoul/therepo.git

Oto mój lokalny .git/config:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://[email protected]/Nicolas_Raoul/therepo.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

W tym samym środowisku z tym samym kluczem publicznym Git na Github działa dobrze.
.sshjest rwx------, .ssh/id_rsajest -rw-------, .ssh/id_rsa.pubjest-rw-r--r--

Nicolas Raoul
źródło

Odpowiedzi:

265

Czy na pewno sklonowałeś go przy użyciu adresu URL ssh?

Adres URL pochodzenia mówi, url = https://[email protected]/Nicolas_Raoul/therepo.gitwięc jeśli używa https, poprosi o hasło niezależnie od twoich kluczy ssh.

Co chcesz zrobić, to:

otwórz plik konfiguracyjny w bieżącym repozytorium.

vim .git/config

i zmień linię z adresem URL z

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://[email protected]/Nicolas_Raoul/therepo.git

do

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = [email protected]:Nicolas_Raoul/therepo.git
manojlds
źródło
62
Masz rację, dzięki! Najprawdopodobniej sklonowałem z niewłaściwym adresem URL. Wymieniłem URL w .git/configz [email protected]:Nicolas_Raoul/therepo.gita teraz to działa!
Nicolas Raoul,
8
i zmienić pilota za pomocą git stackoverflow.com/questions/2432764/...
Alex Nolasco,
3
To bitbucket zaproponował mi adres URL https podczas tworzenia repozytorium! Dlaczego!
Denis Kniazhev,
4
Pamiętaj, jeśli twój bitbucket jest prywatny, jeśli chcesz korzystać z protokołu git, musisz dodać swój klucz ssh do strony internetowej BitBuket w swoich ustawieniach.
cevaris
7
Musiałem zmienić adres URL na ssh://[email protected]/userName/repoName.git- bez ssh://prefiksu nie działało.
trygub
34

Jak wyjaśniono tutaj , jeśli klonujesz z adresem URL SSH , nie musisz wprowadzać nazwy użytkownika / hasła za każdym razem, gdy naciskasz / ciągniesz. Sprawdź powyższą odpowiedź przez @manojlds

Ale jeśli chcesz sklonować za pomocą HTTPS i chcesz uniknąć wpisywania nazwy użytkownika / hasła za każdym razem, możesz przechowywać poświadczenia w pamięci podręcznej za pomocą poniższego polecenia:

git config --global credential.helper 'cache --timeout 3600'

gdzie 3600 (sekund) oznacza 1 godzinę, możesz to zmienić zgodnie ze swoimi wymaganiami.

Ajeet Shah
źródło
@atilkan W takim przypadku, czy możesz podać swój komputer / system operacyjny i informacje o wersji git? I komunikat o błędzie, jeśli występuje, podczas próby ustawienia ustawienia pamięci podręcznej.
Ajeet Shah
Sklonowałem czyjeś repozytorium z bitbucket, a oto moje piloty. manecs-MBP:LocationTracker manec$ git remote -v origin https://[email protected]/Vysh1/locationtracker.git (fetch) origin https://[email protected]/Vysh1/locationtracker.git (push)
Banee Ishaque K
@AjeetShah co jeśli wprowadzę nieprawidłowe hasło? czy to też buforuje nieprawidłowe hasło?
anaval
@anaval Dlaczego tego nie spróbujesz, a następnie spróbuj wprowadzić prawidłowe hasło po wyczyszczeniu lub wyłączeniu pamięci podręcznej? Edytuj odpowiedź i daj nam znać, jak to zrobiłeś :)
Ajeet Shah,
19

To już odpowiedział powyżej. Podsumuję kroki do sprawdzenia powyżej.

uruchom git remote -vw projekcie reż. Jeśli wynik pokazuje zdalny adres URL zaczynający się od https://abc, być może za każdym razem będziesz potrzebować hasła do nazwy użytkownika.

Aby zmienić zdalne uruchamianie adresu URL git remote set-url origin {ssh remote url address starts with mostly [email protected]:}.

Teraz uruchom, git remote -v aby zweryfikować zmieniony zdalny adres URL.

Patrz: https://help.github.com/articles/changing-a-remote-s-url/

Shiva Kumar
źródło
16

Witajcie Googlersi z przyszłości.

W MacOS> = High Sierra klucz SSH nie jest już zapisywany w KeyChain z powodów .

Ponowne użycie również ssh-add -Knie przeżywa.

Oto 3 możliwe rozwiązania .

Z powodzeniem zastosowałem pierwszą metodę. Został utworzony plik o nazwie configw ~/.ssh:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
Vaiden
źródło
2
To wymaga więcej uwagi! Spędziłem całe wieki, szukając rozwiązania, a pierwszy z configpliku /.sshdziała idealnie!
Kitson
1
Te odpowiedzi rozwiązały mój problem na MacO: cd ~/.ssh+ ls+ nano config(plik został już utworzony) + dodaj kod w odpowiedzi Vaiden. Następnie kontroluj X + Y, aby zapisać plik.
Sébastien Gicquel
9

W przypadku żądania HTTP można również i alternatywnie wkleić poświadczenia (z hasłem) bezpośrednio w adresie URL:

http://username:[email protected]/...

Pozwoli to zaoszczędzić bólu, aby ponownie podawać swoje dane uwierzytelniające. Wystarczy zmodyfikować .git / config (adres URL).

Sven W.
źródło
10
Ale nie jest bezpieczny. I nie działa, jeśli hasło ma jakąś literę$%
Gank
3
Każdy, kto czyta ten komentarz, pamiętaj: tylko dlatego, że działa , nie znaczy, że jest poprawny . Jeśli kopiujesz hasło gdziekolwiek na stałe, robisz to źle. To samo z tymi, którzy zawsze ustawiają uprawnienia do folderów na 777: zatrzymywanie, myślenie, badanie, rozumienie, a następnie robienie tego poprawnie.
dKen
9

Żadna z tych odpowiedzi mi nie pomogła, okazało się, że mój problem był nieco inny. Przed wysłaniem klucza to ssh prosiło o hasło za każdym razem. Musiałem więc połączyć moje hasło z tym poleceniem:

ssh-add -K ~/.ssh/id_rsa

Następnie wyświetli monit o podanie hasła i zapisanie go. Może to być rozwiązanie, którego szukasz, jeśli za każdym razem pojawi się monit o podanie hasła

Wprowadź hasło dla klucza „/Users//.ssh/id_rsa”:

Więcej informacji tutaj

UWAGA: Użyłem tego z powodzeniem na moim komputerze Mac, ale jak zauważył @Rob Kwasowski poniżej, Kopcja wielkich liter jest unikalna dla komputerów Mac. Jeśli nie na Macu, będziesz musiał używać małych liter k(co prawdopodobnie działa również na Macu, ale nie testowałem).

stackPusher
źródło
1
To świetnie, ale powinno być kssh-add -k ~/.ssh/id_rsa
pisane
czy mógłbyś opracować proszę?
stackPusher
Jak wyjaśniono tutaj: ssh.com/ssh/add , opcja wiersza poleceń ma małe litery k, a nie wielkie litery, ponieważ w tych opcjach rozróżniana jest wielkość liter .
Rob Kwasowski,
w prawo, ale opcja K dużymi literami również doda klucz do pęku kluczy, a mała litera K tylko doda klucz do agenta. więc pytam: „dlaczego nie chcesz, aby klucz był również dodawany do twojego pęku kluczy?”
stackPusher
1
Należy zdawać sobie sprawę z różnic platformy, -Kjest specyficzna dla Mac: help.github.com/en/articles/error-ssh-add-illegal-option----k
Rob Kwasowski
5
webdev5
źródło
Myślę, że tak Step 1jest Windowsi Step 2jest, Linuxale zapomniałeś o tym wspomnieć poprawnie.
Ajeet Shah,
Uruchomiłem te 3 kroki na moim Windowsie i zadziałało.
webdev5,
2
W takim przypadku chciałbym dodać, że w systemie Linux potrzebujemy tylko kroku 2 i kroku 3 dla tego samego efektu :)
Ajeet Shah
4

Poniżej zakłada się dostęp z wiersza poleceń za pośrednictwem iTerm / Terminal do bitbucket.

W systemie MacOS Sierra 10.12.5 mój system wykazywał równoważny problem - pytając o moje hasło SSH przy każdym połączeniu z bitbucket.

Problem dotyczy aktualizacji OpenSSH w macOS 10.12.2, które są opisane tutaj w nocie technicznej TN2449 .

Bardzo dobrze możesz dostosować swoje rozwiązanie, ale następujące działania będą działać po dodaniu do pliku ~ / .ssh / config:

Host *
    UseKeychain yes

Aby uzyskać więcej informacji na temat konfiguracji ssh, zajrzyj na strony podręcznika dla ssh_config:

% man ssh_config

Jeszcze jedna rzecz: tutaj jest dobry opis superużytkownika , który omawia ten problem i różne rozwiązania w zależności od potrzeb i konfiguracji.

pob
źródło
2

Sklonowałem repozytorium za pomocą adresu URL HTTPS zamiast adresu URL SSH, dlatego nawet po dodaniu klucza SSH prosiłem mnie o hasło do Bash Shell.

Właśnie edytowałem ./.git/configplik i zmieniłem wartość urlzmiennej, po prostu zamieniając https://nassh://

Na przykład

[core]
        ...
        ...
        ...
[remote "origin"]
        url = https://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

Zmienić na:

[core]
        ...
        ...
        ...
[remote "origin"]
        url = ssh://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...
Swaroop Bhagwat
źródło
1

Może być konieczne dwukrotne sprawdzenie pliku tożsamości SSH. Być może kierujesz BitBucket, aby spojrzeć na inny / niepoprawny klucz prywatny do równoważnego klucza publicznego, który zapisałeś na BitBucket.

Sprawdź za pomocą tail ~/.ssh/config- zobaczysz coś podobnego do:

Host bitbucket.org
 HostName bitbucket.org
 IdentityFile ~/.ssh/personal-bitbucket-ssh-key

Pamiętaj, że dodanie dodatkowych tożsamości (takich jak praca i dom) można wykonać za pomocą ssh-addpolecenia, na przykład:

ssh-keygen -t rsa -C "companyName" -f "companyName"
ssh-add ~/.ssh/companyName

Po potwierdzeniu, który klucz prywatny jest sprawdzany lokalnie, możesz wziąć swój publiczny odpowiednik, w tym przypadku:

cat ~/.ssh/personal-bitbucket-ssh-key.pub | pbcopy

I wklej ten szyfr na BitBucket. Twoje wypychania git będą teraz (pod warunkiem, że używasz klonu SSH, jak wspomniano powyżej), bez hasła, ponieważ twoje urządzenie jest rozpoznawalne jako przyjazne.

Mam nadzieję, że to pomoże komuś to wyjaśnić.

Dotacja
źródło
0

Ze mną, chociaż uruchomiłem 'git clone ssh: //[email protected]: 7999 / projName / projA.git' Wciąż pojawiał się monit o hasło do nowego repo, które sklonowałem, więc porównując jego .git / config do innych działających repozytoriów. Okazało się, że jest to adres URL w sekcji [zdalne „pochodzenie”], dla nowej repozytorium został ustawiony na ścieżkę ssh powyżej, ale dla działającego ustawiony był https: xxx .

Ninos
źródło
0

Miałem inne dziwactwa związane z logowaniem. Natknąłem się na coś, co wydawało się całkowicie głupie, ale działało w moim przypadku. Po prostu przejdź do pęku kluczy MacOS. Znajdź ikonę blokady logowania na pasku bocznym. Kliknij, aby się wylogować, a następnie kliknij, aby się zalogować. Brzmi głupio, ale rozwiązało to moje problemy. Warto spróbować.

smileBot
źródło