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.