Escape @ caractere na senha do proxy git

90

Eu tenho git proxy config como 'http.proxy = http: // userId: pwd @ 123 @ipaddress: port', mas ao clonar um projeto remoto, estou recebendo um erro 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

Como escapar do caractere '@' na senha?

Observação: não consigo alterar a senha.

Karthik
fonte

Respostas:

161

Eu tentaria usar o valor de URL codificado do símbolo @ ( %40) se você estiver passando a senha no url do proxy:

http.proxy=http://userId:pwd%40123@ipaddress:port
John Weldon
fonte
3
Estou tentando fazer o mesmo truque, mas com 'git clone user: pwd% 40123 @ ip: port ' e não funciona. Então eu acho que o git não usa curl nesta situação?
Joseph Garvin
interessante ... não tenho certeza. Provavelmente, vale a pena tentar ver o que realmente é enviado pela rede neste caso.
John Weldon
1
Isso me ajudou. Você deve codificar em url separadamente as partes do nome e da senha. Isso o ajudará a evitar problemas com caracteres especiais. Por exemplo, pode haver o sinal ":" que também pode causar problemas.
Stalinko
2
Isso também é incrível quando você tem '@' no nome de usuário, por exemplo, quando você tem endereços de e-mail como nomes de usuário.
ramdesh
Muito obrigado por resolver meu problema depois de dois dias de luta ... muito difícil encontrar o motivo para esse tipo de problema.
lleiou 01 de
62

Nota (novembro de 2013)

Codificar o url (especialmente qualquer caractere especial em uma senha) é a solução certa.
O .netrcmencionado abaixo é apenas para repo url remoto, não para o proxy usado para resolver o referido repo url remoto.

Para a referida codificação, consulte " Porcentagem de codificação ":

A codificação percentual, também conhecida como codificação de URL , é um mecanismo para codificar informações em um URI ( Uniform Resource Identifier ) sob certas circunstâncias. Embora seja conhecido como codificação de URL, é, na verdade, usado de maneira mais geral dentro do conjunto principal de Uniform Resource Identifier (URI), que inclui o Uniform Resource Locator (URL) e o Uniform Resource Name (URN). Como tal, ele também é usado na preparação de dados do tipo de mídia application / x-www-form-urlencoded , como é freqüentemente usado no envio de dados de formulário HTML em solicitações HTTP .

Caracteres reservados após codificação percentual:

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

Resposta original (maio de 2011)

Dois comentários:

  • ter uma senha para um servidor acessado com http (não https) é ... estranho. A senha não é criptografada durante as comunicações entre o cliente e o servidor;

  • você pode configurar um .netrc(ou _netrcpara Windows) em seu $HOME, com o seguinte conteúdo

    endereço ip da máquina: porta
    login userId
    senha pwd @

O curl usado pelo Git nos bastidores lidaria perfeitamente com a codificação, @ou não @.

VonC
fonte
Obrigado por suas respostas. O servidor era uma unidade de rede onde apenas eu e outros 2 desenvolvedores usaremos. Portanto, acho que não há necessidade de criptografia. E vou tentar usar o netrc algum dia.
Karthik
@Karthik: isso permitirá que você simplesmente use: http://123@ipaddress:port/...como um endereço de clonagem, sem ter que adicionar informações de usuário e senha.
VonC
5

Por exemplo, sua senha armazenada na variável de ambiente GIT_PASSWORD, nome de usuário - GIT_USERNAME, então:

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

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

  1. Senha de impressão: $GIT_PASSWORD<-hello
  2. Converta 'olá' em hexadecimal: hello<-x68x65x6Cx6Cx6F
  3. Altere cada 'x' para '%': x68x65x6Cx6Cx6F<-%68%65%6C%6C%6F
isnullxbh
fonte
No primeiro ponto da explicação, você pretendia usar $ GIT_ PASSWORD em vez de $ GIT_REPOSITORY?
Ninju Bohra