Escape @ -Zeichen im Git-Proxy-Passwort

84

Ich habe die Git-Proxy-Konfiguration als 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port', aber beim Klonen eines Remote-Projekts wird die Fehlermeldung als angezeigt

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

Wie entkomme ich dem @ -Zeichen im Passwort?

Bitte beachten Sie: Ich kann das Passwort nicht ändern.

Karthik
quelle

Antworten:

152

Ich würde versuchen, den URL-codierten Wert des @ -Symbols ( %40) zu verwenden, wenn Sie das Kennwort in der Proxy-URL übergeben:

http.proxy=http://userId:pwd%40123@ipaddress:port
John Weldon
quelle
3
Ich versuche den gleichen Trick zu machen, aber mit 'git clone user: pwd% 40123 @ ip: port ' und es funktioniert nicht. Also denke ich, dass Git in dieser Situation keine Locken verwendet?
Joseph Garvin
interessant ... nicht sicher. In diesem Fall lohnt es sich wahrscheinlich zu versuchen, herauszufinden, was tatsächlich über das Kabel gesendet wird.
John Weldon
1
Das hat mir geholfen. Sie sollten sowohl den Namen als auch das Kennwort separat per URL codieren. Dies hilft Ihnen, Probleme mit speziellen Zeichen zu vermeiden. Zum Beispiel kann es ein ":" - Zeichen geben, das ebenfalls zu Problemen führt.
Stalinko
2
Dies ist auch fantastisch, wenn Sie '@' im Benutzernamen haben, z. B. wenn Sie E-Mail-Adressen als Benutzernamen haben.
Ramdesh
Vielen Dank, dass Sie mein Problem nach zwei Tagen Kampf gelöst haben ... es ist wirklich schwer, den Grund für diese Art von Problem zu finden.
Lleiou
59

Anmerkung (November 2013)

Das Codieren der URL (insbesondere eines Sonderzeichens in einem Passwort) ist die richtige Lösung.
Das .netrcFolgende gilt nur für die Remote-Repo-URL, nicht für den Proxy, der zum Auflösen der Remote-Repo-URL verwendet wird.

Für diese Codierung siehe " Prozentcodierung ":

Die Prozentcodierung, auch als URL- Codierung bezeichnet , ist unter bestimmten Umständen ein Mechanismus zum Codieren von Informationen in einem URI ( Uniform Resource Identifier ). Obwohl es als URL-Codierung bekannt ist, wird es in der Tat allgemeiner im URI-Satz ( Uniform Resource Identifier ) verwendet, der sowohl URL ( Uniform Resource Locator ) als auch URN ( Uniform Resource Name ) enthält. Als solches wird es auch bei der Aufbereitung von Daten des Medientyps application / x-www-form-urlencoded verwendet , wie es häufig bei der Übermittlung von HTML- Formulardaten in HTTP- Anforderungen verwendet wird.

Reservierte Zeichen nach Prozentcodierung:

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

Ursprüngliche Antwort (Mai 2011)

Zwei Kommentare:

  • Ein Passwort für einen Server zu haben, auf den mit http (nicht https) zugegriffen wird, ist ... seltsam. Das Kennwort wird während der Kommunikation zwischen Client und Server nicht verschlüsselt.

  • Sie können ein .netrc(oder _netrcfür Windows) in Ihrem $HOMEmit dem folgenden Inhalt einrichten

    Maschinen-IP-Adresse: Port
    Login Benutzer-ID
    Passwort pwd @

Die von Git hinter der Szene verwendete Locke würde die Codierung gut handhaben, @oder nein @.

VonC
quelle
Danke für deine Antworten. Der Server war ein Netzwerklaufwerk, auf dem nur ich und andere 2 Entwickler arbeiten werden. Ich denke, es besteht keine Notwendigkeit für eine Verschlüsselung. Und ich werde irgendwann versuchen, netrc zu verwenden.
Karthik
@Karthik: Damit können Sie einfach: http://123@ipaddress:port/...als Klonadresse verwenden, ohne Benutzer- und Kennwortinformationen hinzufügen zu müssen.
VonC
5

Zum Beispiel Ihr Passwort in der Umgebungsvariablen GIT_PASSWORDBenutzername - gespeichert GIT_USERNAME, dann:

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

Erklärung von: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. Passwort drucken: $GIT_REPOSITORY<-hello
  2. Konvertiere 'Hallo' in Hex: hello<-x68x65x6Cx6Cx6F
  3. Ändern Sie jedes 'x' in '%': x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F
isnullxbh
quelle