Jak podać nazwę użytkownika i hasło, uruchamiając „git clone [email protected]”?

844

Wiem, jak podać nazwę użytkownika i hasło do żądania HTTPS w następujący sposób:

git clone https://username:password@remote

Ale chciałbym wiedzieć, jak podać nazwę użytkownika i hasło do pilota w następujący sposób:

git clone [email protected]

Próbowałem tak:

git clone username:password@[email protected]
git clone git@username:[email protected]
git clone [email protected]@username:password

Ale nie zadziałały.

koordynować
źródło
4
Nie możesz „Git” przed „@” jest już nazwą użytkownika. Skąd masz adres URL repozytorium ([email protected])? Skąd pomysł, że musisz podać inną nazwę użytkownika i hasło?
Ken Thomases
3
Mój adres repos pochodzi z heroku „[email protected]: zxy-helloworld.git”. I używam powłoki emacsa do klonowania i pchania. Jeśli powłoka poprosi o hasło, emacs się zawiesi. Jest to znany problem z emacsem w systemie Windows: gnu.org/software/emacs/windows/…
koordynacja
Co jeśli nazwa użytkownika to e-mail? jak to piszesz? myemail @ gmail.com @ example.com ?
Kyon Perez

Odpowiedzi:

1316

Na podstawie komentarza Michaela Scharfa:

Możesz pominąć hasło, aby nie zostało zarejestrowane w pliku historii Bash:

git clone https://[email protected]/username/repository.git

Pojawi się monit o podanie hasła.

Alternatywnie możesz użyć:

git clone https://username:[email protected]/username/repository.git

W ten sposób działało dla mnie z repozytorium GitHub.

Bassetassen
źródło
5
tak przy okazji, nie musi być tak samo. Jeśli Twój kolega utworzył repozytorium git i logujesz się jako inne konto, nie będą one takie same.
holgac
48
Nie zaleca się umieszczania hasła w adresie URL tego pliku zapisanego w .git / config. Nie jest bezpieczne, lepiej użyć klucza ssh
zetanova
55
@MrDuk nie ma problemu, ucieknij (jak% 40 iirc).
Benjamin Gruenbaum
57
Można pominąć hasło: git clone https://[email protected]/username/repository.git. git zapyta cię i nie zostanie zapisany w .git / config ani w twojej historii
bashów
36
możesz również wpisać „spację” na początku wiersza, aby linux nie zapisał polecenia w historii
Nicolas Zozol
212

user@host:path/to/repoFormat opowiada Git do ssh do zalogowania się hostz nazwą użytkownika user. Od git help clone:

Alternatywna składnia podobna do scp może być również używana z protokołem ssh:

[user@]host.xz:path/to/repo.git/

Część przed nim @to nazwa użytkownika, a metoda uwierzytelnienia (hasło, klucz publiczny itp.) Jest określana przez ssh, a nie Git. Git nie ma możliwości przekazania hasła do ssh, ponieważ ssh może nawet nie użyć hasła, w zależności od konfiguracji zdalnego serwera.

Służy ssh-agentdo unikania ciągłego wpisywania haseł

Jeśli nie chcesz cały czas wpisywać hasła ssh, typowym rozwiązaniem jest wygenerowanie pary kluczy publiczny / prywatny , umieszczenie klucza publicznego w ~/.ssh/authorized_keyspliku na zdalnym serwerze i załadowanie klucza prywatnego ssh-agent. Patrz także Konfigurowanie Git przez SSH, aby zalogować się raz , strona pomocy GitHub jest na hasło podczas kluczowych ssh , dokumentacji ssh gitolite za i dokumentacji kluczy SSH Heroku użytkownika .

Wybieranie między wieloma kontami w GitHub (lub Heroku lub ...)

Jeśli masz wiele kont w miejscu takim jak GitHub lub Heroku, będziesz mieć wiele kluczy ssh (co najmniej jedno na konto). Aby wybrać konto, na które chcesz się zalogować, musisz powiedzieć ssh, którego klucza prywatnego użyć .

Załóżmy na przykład, że masz dwa konta GitHub: fooi bar. Twój klucz ssh footo is, ~/.ssh/foo_github_ida twój klucz ssh barto is ~/.ssh/bar_github_id. Chcesz uzyskać dostęp [email protected]:foo/foo.gitz Twojego fookonta i [email protected]:bar/bar.gitze swoim barkontem. Dodaj do tego ~/.ssh/config:

Host gh-foo
    Hostname github.com
    User git
    IdentityFile ~/.ssh/foo_github_id
Host gh-bar
    Hostname github.com
    User git
    IdentityFile ~/.ssh/bar_github_id

Następnie sklonowałbyś dwa repozytoria w następujący sposób:

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

Całkowicie unikając ssh

Niektóre usługi zapewniają dostęp HTTP jako alternatywę dla ssh:

OSTRZEŻENIE : Dodanie hasła do sklonowanego adresu URL spowoduje, że Git zapisze hasło w postaci zwykłego tekstu .git/config. Aby bezpiecznie przechowywać hasło podczas korzystania z HTTP, użyj pomocnika poświadczeń. Na przykład:

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

Powyższe spowoduje, że Git będzie pytać o twoje hasło raz na 15 minut (domyślnie). Zobacz git help credentialsszczegóły.

Richard Hansen
źródło
To najlepsze wytłumaczenie tego, jak git współpracuje z SSH. Rozumiem, że kiedy podasz [email protected]: path / to / repo.git, to skutecznie mówi git, że użytkownik jest git i że powinien pobrać swoje dane uwierzytelniające (klucz publiczny) od ssh-agent dla Host „githost.com”.
Anael,
39

W komentarzach @ Bassetassen za odpowiedź , @plosco wspomniano, że można użyć git clone https://<token>@github.com/username/repository.gitdo klonu z GitHub przynajmniej. Pomyślałem, że rozwinę sposób, w jaki to zrobić, na wypadek, gdyby ktoś natrafił na tę odpowiedź, tak jak ja, próbując zautomatyzować klonowanie.

GitHub ma bardzo przydatny przewodnik, jak to zrobić, ale nie obejmuje tego, co zrobić, jeśli chcesz uwzględnić to wszystko w jednym wierszu dla celów automatyzacji. Ostrzega, że dodanie tokena do sklonowanego adresu URL spowoduje zapisanie go w postaci zwykłego tekstu .git/config . Jest to oczywiście zagrożenie bezpieczeństwa dla prawie każdego przypadku użycia, ale ponieważ planuję usunąć repozytorium i odwołać token, gdy skończę, nie obchodzi mnie to.

1. Utwórz token

GitHub ma tutaj cały przewodnik, jak zdobyć token, ale oto TL; DR.

  1. Idź do Ustawienia> Ustawienia Twórca> Personal dostępu Żetony ( tutaj jest bezpośredni link )
  2. Kliknij „Wygeneruj nowy token” i ponownie wprowadź hasło. ( jest inny bezpośredni link )
  3. Ustaw jego opis / nazwę, sprawdź uprawnienie „repo” i naciśnij przycisk „Generuj token” u dołu strony.
  4. Skopiuj nowy token przed opuszczeniem strony

2. Sklonuj repozytorium

Samo jak @plosco polecenie dał, git clone https://<token>@github.com/<username>/<repository>.gittylko zastąpić <token>, <username>a <repository>z informacji bez względu na to.

Jeśli chcesz sklonować go do określonego folderu, po prostu wstaw adres folderu na końcu w następujący sposób: git clone https://<token>@github.com/<username>/<repository.git> <folder>gdzie <folder>jest, zgadłeś, folder do klonowania! Oczywiście można użyć ., .., ~, itd. Tutaj jak można gdzie indziej.

3. Nie pozostawiaj śladu

Nie wszystko to może być konieczne, w zależności od tego, jak wrażliwe jest to, co robisz.

  • Prawdopodobnie nie chcesz pozostawiać tego tokena bezczynnie, jeśli nie masz zamiaru go używać przez pewien czas, więc wróć do strony z tokenami i naciśnij znajdujący się obok niego przycisk usuwania.
  • Jeśli nie potrzebujesz ponownie repozytorium, usuń je rm -rf <folder>.
  • Jeśli ponownie potrzebujesz repozytorium, ale nie musisz go zautomatyzować ponownie, możesz usunąć pilota, wykonując git remote remove originlub po prostu usunąć token, uruchamiając go git remote set-url origin https://github.com/<username>/<repository.git>.
  • Wyczyść historię bash, aby upewnić się, że token nie pozostaje tam zalogowany. Można to zrobić na wiele sposobów, zobacz to pytanie i to pytanie . Jednak może być łatwiej po prostu wstawić wszystkie powyższe polecenia ze spacją, aby zapobiec ich zapisaniu na początku.

Zauważ, że nie jestem zawodowcem, więc powyższe może nie być bezpieczne w tym sensie, że nie pozostanie żaden ślad dla jakiejkolwiek pracy kryminalistycznej.

Rob Rose
źródło
1
https://<token>@github.comnie został zaakceptowany z moim portalem, musiałem użyćhttps://oauth2:<token>@github.com
MushyPeas
25

Mimo że istnieje wiele odpowiedzi, mam do czynienia z powtarzającym się problemem, gdy nazwa użytkownika lub hasło zawierają znaki specjalne.

URL koduje twoją nazwę użytkownika i hasło do git, a następnie użyj go jako części samego adresu URL (gdy nie ma obaw o bezpieczeństwo).

Powiedzmy, wartość nazwy użytkownika zakodowana w adresie URL

„użytkownik + 1” to użytkownik% 2B1

i wartość hasła zakodowana w adresie URL

„Welcome @ 1234” to Welcome% 401234

Wówczas Twój adres URL klonowania GIT wyglądałby następująco:

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo działa idealnie, podczas gdy

git clone https: // user + 1: Welcome @ 1234 @ actual-git-url-for-the-repo daje 403 błędy

Mam nadzieję że to pomoże.

Na wszelki wypadek chcesz zakodować adres URL online: https://www.urlencoder.org/

Santosh Kumar Arjunan
źródło
13

Rozwiązałem ten problem w następujący sposób:

wprowadź opis zdjęcia tutaj

BehrouzMoslem
źródło
11
nigdy nie jest dobrym pomysłem wpisywanie hasła w wierszu poleceń. Czy wiesz, że Twój system może przechowywać historię wiersza poleceń w pliku? (Np .: Linux ma ukryty plik o nazwie .bash_history)
sierpień
Poprawny. Ilekroć to robię, lub coś takiego, co czasami może być bardzo wygodne, zawsze usuwam polecenie, którego użyłem z historii (history -d).
Francesco Marchetti-Stasi,
4
@ FrancescoMarchetti-Stasi nie musisz usuwać polecenia, wystarczy użyć spacji na początku polecenia i nigdy nie zostanie ono zapisane w historii.
Ishtiyaq Husain
Tak - nauczyłem się tego zaledwie kilka miesięcy temu, po prawie 30 latach na systemach uniksowych ... wstyd mi :)
Francesco Marchetti-Stasi
9

W systemie Windows następujące kroki powinny ponownie uruchomić okno logowania GitHub podczas git cloneing:

  • Wyszukaj w menu Start „Menedżera poświadczeń”
  • Wybierz „Poświadczenia systemu Windows”
  • Usuń wszelkie poświadczenia związane z Git lub GitHub

wynik

Ore4444
źródło
5
git config --global core.askpass

Uruchom to przed klonowaniem w ten sam sposób, powinno zostać naprawione!

Rohan
źródło
3
Próbowałem tego, ale nadal o to nie prosi.
Maarten Kieft,
Ustawienie globalnej konfiguracji nigdy nie jest dobrym pomysłem, ponieważ może zepsuć inne klony.
Martin
1

To doskonałe pytanie dotyczące przepełnienia stosu, a odpowiedzi były bardzo pouczające, dzięki czemu mogłem rozwiązać irytujący problem, na który wpadłem ostatnio.

Organizacja, dla której pracuję, korzysta z Atlassian's BitBucketproduktu (nie Github), w zasadzie ich wersji GitHub, aby repozytoria mogły być całkowicie zabezpieczone na miejscu. Miałem podobny problem jak @coordinate, ponieważ moje hasło było wymagane do nowego repozytorium, które wypisałem. Moje poświadczenia zostały zapisane na całym świecie dla wszystkich BitBucketprojektów, więc nie jestem pewien, co spowodowało utratę poświadczeń.

Krótko mówiąc, byłem w stanie wprowadzić następującą komendę GIT (podając tylko moją nazwę użytkownika), która następnie zachęciła Menedżera Poświadczeń Git do pytania o hasło, które następnie mogłem zapisać.

git clone https://[email protected]/git/[organization]/[team]/[repository.git]

UWAGA: w ścieżkach podkatalogów w nawiasach znajdują się odwołania do wewnętrznych odniesień i będą się różnić dla Ciebie!

Michael M.
źródło
0

Jeśli używasz http/httpsi chcesz W PEŁNI ZAUTOMATYZOWAĆ proces bez konieczności wprowadzania jakichkolwiek danych przez użytkownika lub w ogóle monitowania użytkownika (na przykład: wewnątrz potoku CI / CD), możesz skorzystać z następującego podejściagit credential.helper

GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used

git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}

gdzie możesz ustawić ALICE_GITHUB_PASSWORDzmienną środowiskową z poprzedniego polecenia powłoki lub z konfiguracji potoku itp.

Pamiętaj, że pomocnik git oparty na „przechowywaniu” przechowuje hasła i wartości w postaci zwykłego tekstu. Upewnij się więc, że twój token / hasło ma bardzo ograniczone uprawnienia.


Teraz wystarczy użyć https: //[email protected]/my_repo.git wszędzie tam, gdzie twój zautomatyzowany system musi pobrać repozytorium - użyje poświadczeń dla alicein github.comas store przez git-credential-helper.

Rakib
źródło