Carattere Escape @ nella password del proxy git


90

Ho git proxy config come 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port' ma durante la clonazione di un progetto remoto, ricevo un errore come

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

Come sfuggire al carattere "@" nella password?

Nota: non posso cambiare la password.

Risposte:


161

Proverei a utilizzare il valore URL Encoded del simbolo @ ( %40) se stai passando la password nell'URL del proxy:

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

3
Sto provando a fare lo stesso trucco ma con "git clone user: pwd% 40123 @ ip: port " e non funziona. Quindi immagino che git non usi curl in questa situazione?
Joseph Garvin,

interessante ... non sono sicuro. Probabilmente vale la pena provare a vedere cosa viene effettivamente inviato attraverso il filo in questo caso.
John Weldon,

1
Questo mi ha aiutato. Dovresti codificare separatamente sia il nome che la password. Questo ti aiuterà a evitare problemi con caratteri speciali. Ad esempio ci può essere il segno ":" che porterà anche a problemi.
Stalinko

2
Questo è fantastico anche quando hai "@" nel nome utente, ad esempio quando hai indirizzi email come nomi utente.
ramdesh

Grazie mille per aver risolto il mio problema dopo due giorni di lotta ... davvero difficile trovare la ragione di questo tipo di problema.
lleiou

62

Nota (novembre 2013)

La codifica dell'URL (in particolare qualsiasi carattere speciale in una password) è la soluzione giusta.
Quanto .netrcindicato di seguito è solo per l'URL del repository remoto, non per il proxy utilizzato per risolvere l'URL del repository remoto.

Per tale codifica, vedere " Codifica percentuale ":

La codifica percentuale, nota anche come codifica URL , è un meccanismo per codificare le informazioni in un URI ( Uniform Resource Identifier ) in determinate circostanze. Sebbene sia nota come codifica URL, è, infatti, utilizzata più generalmente all'interno del set principale di URI ( Uniform Resource Identifier ), che include sia Uniform Resource Locator (URL) che Uniform Resource Name (URN). In quanto tale, viene anche utilizzato nella preparazione dei dati del tipo di supporto application / x-www-form-urlencoded , come spesso viene utilizzato nella presentazione dei dati del modulo HTML in HTTP richieste .

Caratteri riservati dopo la codifica percentuale:

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

Risposta originale (maggio 2011)

Due commenti:

  • avere una password per un server a cui si accede con http (non https) è ... strano. La password non è crittografata durante le comunicazioni tra client e server;

  • potresti impostare un .netrc(o _netrcper Windows) nel tuo $HOME, con il seguente contenuto

    indirizzo ip macchina: porta
    login userId
    password pwd @

Il ricciolo usato da Git dietro le quinte avrebbe gestito la codifica perfettamente, @o no @.


Grazie per le tue risposte. Il server era un'unità di rete in cui utilizzeremo solo io e altri 2 sviluppatori. Quindi penso che non sia necessaria la crittografia. E proverò a usare netrc qualche volta.
Karthik

@Karthik: che ti permetterà di usare semplicemente: http://123@ipaddress:port/...come indirizzo di clonazione, senza dover aggiungere informazioni su utente e password.
VonC


5

Ad esempio, la tua password memorizzata nella variabile d'ambiente GIT_PASSWORD, nome utente - GIT_USERNAME, quindi:

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

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

  1. Password di stampa: $GIT_PASSWORD<-hello
  2. Converti "ciao" in esadecimale: hello<-x68x65x6Cx6Cx6F
  3. Cambia ogni "x" in "%": x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F

Nel primo punto della spiegazione intendevi usare $ GIT_ PASSWORD invece di $ GIT_REPOSITORY?
Ninju Bohra

1

Devi codificare in percentuale | codificare i caratteri speciali. Ad esempio, invece di questo:

http://foo:B@r@http-gateway.domain.org:80

scrivi questo:

http://foo:B%40r@http-gateway.domain.org:80

Quindi @viene sostituito con %40.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.