Escape @ carácter en la contraseña de proxy de git

89

Tengo la configuración de proxy de git como 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port' pero al clonar un proyecto remoto, obtengo un error como

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

¿Cómo escapar del carácter '@' en la contraseña?

Nota: no puedo cambiar la contraseña.

Karthik
fuente

Respuestas:

158

Intentaría usar el valor codificado de URL del símbolo @ ( %40) si está pasando la contraseña en la URL del proxy:

http.proxy=http://userId:pwd%40123@ipaddress:port
John Weldon
fuente
3
Estoy tratando de hacer este mismo truco pero con 'git clone user: pwd% 40123 @ ip: port ' y no funciona. Entonces, ¿supongo que git no usa curl en esta situación?
Joseph Garvin
interesante ... no estoy seguro. Probablemente valga la pena intentar ver qué se envía realmente a través del cable en este caso.
John Weldon
1
Eso me ayudó. Debe codificar en URL por separado las partes del nombre y la contraseña. Esto le ayudará a evitar problemas con caracteres especiales. Por ejemplo, puede haber un signo ":" que también provocará problemas.
Stalinko
2
Esto también es increíble para cuando tiene '@' en el nombre de usuario, por ejemplo, cuando tiene direcciones de correo electrónico como nombres de usuario.
Ramdesh
Muchas gracias por resolver mi problema después de dos días de lucha ... realmente difícil encontrar la razón de este tipo de problema.
lleiou
61

Nota (noviembre de 2013)

Codificar la URL (especialmente cualquier carácter especial en una contraseña) es la solución correcta.
Lo .netrcmencionado a continuación es solo para la URL de repositorio remoto, no para el proxy utilizado para resolver dicha URL de repositorio remoto.

Para dicha codificación, consulte " Codificación porcentual ":

La codificación porcentual, también conocida como codificación de URL , es un mecanismo para codificar información en un Identificador uniforme de recursos (URI) en determinadas circunstancias. Aunque se conoce como codificación URL, de hecho, se usa de manera más general dentro del conjunto principal de Identificador uniforme de recursos (URI), que incluye tanto el Localizador uniforme de recursos (URL) como el Nombre uniforme de recursos (URN). Como tal, también se utiliza en la preparación de datos de la urlencoded-x-www-formulario de solicitud / tipo de soporte , como se utiliza a menudo en la presentación de HTML de formulario de datos en HTTP peticiones.

Caracteres reservados después de la codificación porcentual:

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

Respuesta original (mayo de 2011)

Dos comentarios:

  • tener una contraseña para un servidor al que se accede con http (no https) es ... extraño. La contraseña no está encriptada durante las comunicaciones entre el cliente y el servidor;

  • puede configurar un .netrc(o _netrcpara Windows) en su $HOME, con el siguiente contenido

    dirección IP de la máquina: puerto
    ID de usuario de inicio de sesión
    contraseña pwd @

El rizo utilizado por Git bbehind the scene manejaría bien la codificación, @o no @.

VonC
fuente
Gracias por tus respuestas. El servidor era una unidad de red donde solo lo usaremos yo y otros 2 desarrolladores. Entonces creo que no hay necesidad de cifrado. E intentaré usar netrc en algún momento.
Karthik
@Karthik: eso le permitirá usar simplemente: http://123@ipaddress:port/...como una dirección de clonación, sin tener que agregar información de usuario y contraseña.
VonC
5

Por ejemplo, su contraseña almacenada en la variable de entorno GIT_PASSWORD, nombre de usuario - GIT_USERNAME, luego:

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

Explicación de: echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. Imprimir contraseña: $GIT_REPOSITORY<-hello
  2. Convertir 'hola' a hexadecimal: hello<-x68x65x6Cx6Cx6F
  3. Cambie cada 'x' a '%': x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F
isnullxbh
fuente