102 votes

Échapper au caractère @ dans le mot de passe du proxy git

J'ai configuré le proxy git comme 'http.proxy=http://userId : pwd@123 @ipaddress:port' mais lors du clonage d'un projet distant, j'obtiens l'erreur suivante

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

Comment échapper au caractère '@' dans un mot de passe ?

Remarque : je ne peux pas modifier le mot de passe.

187voto

John Weldon Points 19132

J'essaierais d'utiliser la valeur codée de l'URL du symbole @ ( %40 ) si vous transmettez le mot de passe dans l'url du proxy :

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

3 votes

J'essaie de faire la même chose mais avec 'git clone user:pwd%40123@ip:port et ça ne marche pas. Je suppose donc que git n'utilise pas curl dans cette situation ?

0 votes

Intéressant... pas sûr. Il vaut probablement la peine d'essayer de voir ce qui est réellement envoyé sur le câble dans ce cas.

1 votes

Cela m'a aidé. Vous devriez coder séparément en url le nom et le mot de passe. Cela vous permettra d'éviter tout problème avec les caractères spéciaux. Par exemple, il peut y avoir le signe " :", ce qui peut également entraîner des problèmes.

73voto

VonC Points 414372

Note (novembre 2013)

L'encodage de l'url (en particulier de tout caractère spécial dans un mot de passe) est la bonne solution.
Le .netrc mentionné ci-dessous ne concerne que l'url de la base de données distante, et non le proxy utilisé pour résoudre l'url de la base de données distante.

Pour cet encodage, voir " Encodage en pourcentage " :

Codage en pourcentage, également connu sous le nom d'URL codage est un mécanisme d'encodage de l'information dans un fichier de données. Identificateur de ressources uniformes (URI) dans certaines circonstances. Bien qu'il soit connu sous le nom d'encodage URL, il est en fait utilisé de manière plus générale dans le cadre du système principal de codage de l'Internet. Identificateur de ressources uniformes (URI), qui comprend à la fois Localisateur de ressources uniformes (URL) et Nom de ressource uniforme (URN). En tant que tel, il est également utilisé dans la préparation des données du type application/x-www-form-urlencoded type de support comme c'est souvent le cas dans la soumission de HTML formulaire données dans HTTP demandes.

Caractères réservés après le codage en pourcentage :

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

Réponse originale (mai 2011)

Deux commentaires :

  • Avoir un mot de passe pour un serveur accessible par http (et non https) est... étrange. Le mot de passe n'est pas crypté lors des communications entre le client et le serveur ;

  • vous pourriez mettre en place un .netrc (ou _netrc pour Windows) dans votre $HOME avec le contenu suivant

    machine ipaddress:port
    login userId
    password pwd@

Le curl utilisé par Git en arrière-plan devrait gérer l'encodage sans problème, @ ou non @ .

8voto

conal_lab24 Points 124

L'URL encode tous les caractères inhabituels.

Liste des codes url.

@ character is %40

Dans mon fichier de configuration git, j'ai encodé "juste" le nom d'utilisateur par exemple :

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

8voto

Ravi Parekh Points 997

Vous devez encodage en pourcentage coder les caractères spéciaux. Par exemple, au lieu de ceci :

http://user:Pa@s@http-gateway.domain.org:80

vous écrivez ceci :

http://user:Pa%40s@http-gateway.domain.org:80

Donc @ est remplacé par %40 .

5voto

isnullxbh Points 647

Par exemple, votre mot de passe stocké dans la variable d'environnement GIT_PASSWORD , nom d'utilisateur - GIT_USERNAME alors :

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

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

  1. Imprimer le mot de passe : $GIT_PASSWORD <- hello
  2. Convertir 'hello' en hexadécimal : hello <- x68x65x6Cx6Cx6F
  3. Remplacez chaque "x" par "%" : x68x65x6Cx6Cx6F <- %68%65%6C%6C%6F

0 votes

Dans le premier point de l'explication, avez-vous voulu utiliser $GIT_ ? MOT DE PASSE au lieu de $GIT_REPOSITORY ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X