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

89

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

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 le mot de passe?

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

Karthik
la source

Réponses:

158

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

http.proxy=http://userId:pwd%40123@ipaddress:port
John Weldon
la source
3
J'essaye de faire cette même astuce mais avec 'git clone user: pwd% 40123 @ ip: port ' et cela ne fonctionne pas. Donc je suppose que git n'utilise pas curl dans cette situation?
Joseph Garvin
intéressant ... pas sûr. Cela vaut probablement la peine d'essayer de voir ce qui est réellement envoyé sur le fil dans ce cas.
John Weldon
1
Cela m'a aidé. Vous devez encoder séparément les parties du nom et du mot de passe. Cela vous aidera à éviter tout problème avec les caractères spéciaux. Par exemple, il peut y avoir un signe ":" qui entraînera également des problèmes.
Stalinko
2
C'est également génial lorsque vous avez «@» dans le nom d'utilisateur, par exemple lorsque vous avez des adresses e-mail comme noms d'utilisateur.
ramdesh
Merci beaucoup d'avoir résolu mon problème après deux jours de lutte ... vraiment difficile de trouver la raison de ce genre de problème.
lleiou
61

Note (novembre 2013)

Encoder l'url (en particulier tout caractère spécial dans un mot de passe) est la bonne solution.
Ce qui est .netrcmentionné ci-dessous est uniquement pour l'URL du dépôt distant, pas pour le proxy utilisé pour résoudre ladite URL du dépôt distant.

Pour ledit encodage, voir " Encodage en pourcentage ":

Le codage en pourcentage, également connu sous le nom de codage URL , est un mécanisme de codage des informations dans un URI ( Uniform Resource Identifier ) dans certaines circonstances. Bien qu'il soit connu sous le nom de codage d'URL, il est, en fait, utilisé plus généralement dans l'ensemble principal d' identificateur de ressource uniforme (URI), qui comprend à la fois le localisateur de ressources uniformes (URL) et le nom de ressource uniforme (URN). En tant que tel, il est également utilisé dans la préparation de données du type de support application / x-www-form-urlencoded , comme il est souvent utilisé dans la soumission de données de formulaire HTML dans les requêtes HTTP .

Caractères réservés après encodage 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 remarques:

  • avoir un mot de passe pour un serveur accédé avec http (pas https) est ... étrange. Le mot de passe n'est pas chiffré lors des communications entre le client et le serveur;

  • vous pouvez configurer un .netrc(ou _netrcpour Windows) dans votre $HOME, avec le contenu suivant

    adresse IP de la machine: port
    login userId
    mot de passe pwd @

La boucle utilisée par Git dans les coulisses gèrerait très bien l'encodage, @ou non @.

VonC
la source
Merci pour vos réponses. Le serveur était un lecteur réseau où seuls moi et 2 autres développeurs utiliserons. Je pense donc qu'il n'y a pas besoin de chiffrement. Et j'essaierai d'utiliser netrc un jour.
Karthik
@Karthik: cela vous permettra d'utiliser simplement: http://123@ipaddress:port/...comme adresse de clonage, sans avoir à ajouter des informations d'utilisateur et de mot de passe.
VonC
5

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

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_REPOSITORY<-hello
  2. Convertissez 'bonjour' en hexadécimal: hello<-x68x65x6Cx6Cx6F
  3. Remplacez chaque «x» par «%»: x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F
isnullxbh
la source