Jaki jest prawidłowy sposób używania git z repozytoriami gnome-keyring i http (s)?

43

Obecnie za każdym razem, gdy I git pulllub git pushrepozytorium http (s), otrzymuję:

$ git pull
Username for 'https://gitrepos.reposdomain.com': [email protected]
Password for 'https://[email protected]@gitrepos.reposdomain.com': 

Jest to przydatne w rzadkich przypadkach, ale bardzo szybko zaczyna być naprawdę denerwujące. Niestety przejście na ssh nie jest w tym przypadku opcją.

Przeczytałem, że wcześniejsze wersje gitzawierały poświadczenia i „pamięć podręczną”, ale nie było to zalecane, ponieważ przechowywało hasło w postaci zwykłego tekstu.

ALE

Nowsze wersje gitnajwyraźniej przechowują poświadczenia git w gnome-keyring, ale muszą być poprawnie skonfigurowane.

Próbowałem podążać za innymi (innymi niż Ubuntu) odpowiedziami na SO, aby to zadziałało (mianowicie ta ), ale wciąż pojawia się monit o nazwę użytkownika i hasło.

Jaki jest prawidłowy i najbezpieczniejszy sposób przechowywania gitpoświadczeń dla repozytoriów HTTP i jak je zmusić do działania w Ubuntu?

tu-Reinstate Monica-dor duh
źródło
Powinieneś wspomnieć, które metody wypróbowałeś. W przeciwnym razie możesz znaleźć odpowiedzi sugerujące dokładnie te.
muru
@muru Dlaczego usunąłeś nacisk na czytelność? Teraz jest to tylko kropla tekstu, a przyczyny, które odróżniają pytanie od innych, a rzeczywiste pytanie jest mniej oczywiste.
Tu-Reinstate Monica-dor duh
Całe zdanie pogrubione i kursywą jest mało czytelny.
muru
1
@muru Błagam się różnić. Uważam, że pogrubiony i pochylony tekst ukazuje zasadnicze części pytania.
Tu-Reinstate Monica-dor duh

Odpowiedzi:

45

gnome-credential-helper jest teraz przestarzałe

Zamiast tego użyj libsecret. Jeśli nie jest jeszcze wbudowane w twoje Ubuntu, użyj następującej procedury:

  1. libsecretBiblioteki programistyczne i instalacyjne można instalować za pomocą:

    sudo apt-get install libsecret-1-0 libsecret-1-dev

  2. Następnie musisz zbudować menedżera poświadczeń

    cd /usr/share/doc/git/contrib/credential/libsecret

    sudo make

  3. Na koniec powinieneś wskazać git na nowo utworzony plik w swojej konfiguracji:

    git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Więcej informacji na https://stackoverflow.com/a/40312117/2017781

eddygeek
źródło
1
Warto zauważyć, że to rozwiązanie dotyczy tylko wersji git> = 2.11 (gdzie można następnie znaleźć
katalog libsecret
1
Czy to jest bezpieczne? Gdzie są przechowywane sekrety? Czy zarówno transmisja, jak i przechowywanie są bezpieczne? Czy jest jakaś oficjalna dokumentacja? Najwyraźniej, jak na tej stronie i tej stronie , znajduje się ona w „Main” i jest utrzymywana przez Debian / Ubuntu. I: „Komunikuje się z„ Secret Service ”za pomocą DBus”
caw
1
@caw: W GNOME „Secret Service” to ten sam demon klucza-kluczy gnome, tylko za pośrednictwem innego API. (Plan libsecret miał umożliwić innym DE budowanie własnych backendów obsługujących ten sam API, np. KDE planowało zaimplementować to w kwalletd.)
grawity
5
Aktualizacja mojej preferowanej odpowiedzi, ponieważ mogę zweryfikować, że działa to 18.04. :)
tu-Reinstate Monica-dor duh
44

Musisz skonfigurować git za credential helperpomocą Gnome Keyring:

Zainstaluj i skompiluj wersję Gnome Keyring:

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring

I skonfiguruj poświadczenie:

git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

źródło
To naprawdę dziwne. Semantycznie nie powinno być różnicy między odpowiedzią w linku a tą odpowiedzią. Ale z jakiegoś powodu ta odpowiedź działa tam, gdzie druga nie.
Tu-Reinstate Monica-dor duh
Następnie uruchom git pushlub git pulljak zwykle, a za pierwszym razem zapyta sklep ansd, a za każdym razem dostanie go z kluczy. Aby to sprawdzić, uruchom seahorse. Powinien być wymieniony w sekcji „Hasła” -> „Zaloguj się”.
Tu-Reinstate Monica-dor duh
@tudor To dziwne, nie widzę żadnej „konceptualnej” różnicy między moją odpowiedzią a linkiem. Cieszę się, że to pomaga.
Wydaje mi się dziwne, że nadal musisz uruchomić polecenie „make”, ale te kroki działają świetnie. Dzięki!
DaveTheScientist
2

To proste podejście wydaje się wystarczające na moim Ubuntu 18.04.1 z git 2.17.1:

git config --global credential.helper cache

Możesz określić limit czasu jednej godziny (= 3600 sekund) w następujący sposób:

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

Dalsze czytanie w świetnej instrukcji .

Stephan Henningsen
źródło