Znak Escape @ w haśle proxy git


89

Mam konfigurację git proxy jako „http.proxy = http: // userId: pwd @ 123 @ipaddress: port”, ale podczas klonowania zdalnego projektu pojawia się błąd

Cloning into git...
error: Couldn't resolve proxy '123@ipaddress' while accessing http://git.kernel.org/pub/scm/git/git.git/info/refs

fatal: HTTP request failed

Jak uniknąć znaku „@” w haśle?

Uwaga Pls: nie mogę zmienić hasła.

Odpowiedzi:


158

Spróbowałbym użyć zakodowanej w adresie URL wartości symbolu @ ( %40), jeśli przekazujesz hasło w adresie URL serwera proxy:

http.proxy=http://userId:pwd%40123@ipaddress:port

3
Próbuję zrobić tę samą sztuczkę, ale z „git clone user: pwd% 40123 @ ip: port ” i nie działa. Więc myślę, że git nie używa curl w tej sytuacji?
— Joseph Garvin

interesujące ... nie jestem pewien. Prawdopodobnie warto spróbować zobaczyć, co faktycznie jest przesyłane przez kabel w tym przypadku.
— John Weldon

1
To mi pomogło. Należy oddzielnie zakodować części nazwy i hasła w postaci adresu URL. Pomoże ci to uniknąć problemów ze znakami specjalnymi. Na przykład może występować znak „:”, który również prowadzi do problemów.
— Stalinko

2
Jest to również niesamowite, gdy masz „@” w nazwie użytkownika, np. Gdy masz adresy e-mail jako nazwy użytkownika.
— Ramdesh,

Dziękuję bardzo za rozwiązanie mojego problemu po dwóch dniach zmagań ... naprawdę trudno znaleźć przyczynę tego rodzaju problemu.
— lleiou

61

Uwaga (listopad 2013)

Kodowanie adresu URL (zwłaszcza dowolnego znaku specjalnego w haśle) jest właściwym rozwiązaniem. Wymienionych poniżej jest tylko do zdalnego repo URL, a nie dla proxy używane do rozwiązywania powiedział zdalnego repo URL.
.netrc

Informacje na temat kodowania zawiera sekcja „ Kodowanie procentowe ”:

Kodowanie procentowe, znane również jako kodowanie adresów URL , jest mechanizmem kodowania informacji w jednolitym identyfikatorze zasobów (URI) w określonych okolicznościach. Chociaż jest to znane jako kodowanie adresów URL, jest w rzeczywistości używane bardziej ogólnie w ramach głównego zestawu jednolitego identyfikatora zasobów (URI), który obejmuje zarówno jednolity lokalizator zasobów (URL), jak i jednolitą nazwę zasobu (URN). Jako taki jest również używany do przygotowania danych typu media typu application / x-www-form-urlencoded , jak to jest często wykorzystywane przy przesyłaniu danych formularza HTML w HTTP żądaniach .

Zarezerwowane znaki po kodowaniu procentowym:

!   #   $    &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

Oryginalna odpowiedź (maj 2011)

Dwie uwagi:

  • posiadanie hasła do serwera dostępnego przez http (nie https) jest ... dziwne. Hasło nie jest szyfrowane podczas komunikacji między klientem a serwerem;

  • możesz ustawić .netrc(lub _netrcdla Windows) w swoim $HOME, z następującą zawartością

    maszyna ipaddress: port
    login userId
    hasło pwd @

Zawijanie używane przez Gita za sceną poradziłoby sobie z kodowaniem dobrze @lub nie @.


Dzięki za twoje odpowiedzi. Serwer był dyskiem sieciowym, z którego będziemy korzystać tylko ja i inni dwaj programiści. Więc myślę, że nie ma potrzeby szyfrowania. I kiedyś spróbuję użyć netrc.
— Karthik

@Karthik: to pozwoli ci po prostu użyć: http://123@ipaddress:port/...jako adresu do klonowania, bez konieczności dodawania informacji o użytkowniku i haśle.
— VonC

8

URL koduje nietypowe znaki.

Lista kodów URL.

@ character is %40

W moim pliku konfiguracyjnym git zakodowałem `` tylko '' nazwę użytkownika, na przykład:

https://myemail%40gmail.com@myrepo.org/api.git


5

Na przykład hasło przechowywane w zmiennej środowiskowej GIT_PASSWORDnazwa użytkownika - GIT_USERNAME, a następnie:

git clone http://${GIT_USERNAME}:$(echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %)@repository.git

Wyjaśnienie: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. Wydrukuj hasło: $GIT_REPOSITORY<-hello
  2. Konwertuj „cześć” na szesnastkowy: hello<-x68x65x6Cx6Cx6F
  3. Zmień każdy „x” na „%”: x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.