Conseguir que o Git funcione com um servidor proxy - falha com "Solicitação expirada"

918

Como faço para o Git usar um servidor proxy?

Eu preciso fazer o check-out do código de um servidor Git, mas ele mostra "Solicitação expirada" todas as vezes. Como contornar isso?

Como alternativa, como posso definir um servidor proxy?

PlagueHammer
fonte
Este não seria um item de configuração do cliente git? O único aspecto disso que parece envolver o cmd.exe é que o cliente git pode permitir que você especifique um proxy em uma variável de ambiente.
22711 Michael Burr
Eu editei a pergunta original para remover todas as referências do Windows, pois esse problema é específico do git por si só.
PlagueHammer
3
Observe que você poderá configurar um proxy por URL de repositório git!
VonC 10/09/13
1
Esta pergunta é muito semelhante a " Como puxo de um repositório Git através de um proxy HTTP?" .
Drek Mahar
3
A maioria das respostas nesta pergunta é sobre proxies HTTP. Se você tem um proxy SOCKS, consulte esta pergunta para o HTTP / S protocolos e este para o protocolo git: //.
usuário

Respostas:

1634

Comando a usar:

git config --global http.proxy http://proxyuser:[email protected]:8080
  • mude proxyuserpara seu usuário proxy
  • mude proxypwdpara sua senha de proxy
  • mude proxy.server.compara o URL do seu servidor proxy
  • mude 8080para a porta proxy configurada no seu servidor proxy

Observe que isso funciona para repositórios http e https.

Se você decidir a qualquer momento redefinir esse proxy e funcionar sem ele:

Comando a usar:

git config --global --unset http.proxy

Por fim, para verificar o proxy atualmente definido:

git config --global --get http.proxy
Salim Hamidi
fonte
15
Obrigado Salim. O meu funcionou sem o proxyuser: proxypwd na URL.
Kwex
11
Obrigado rapazes. Para mim, era a autenticação baseada em NTLM e apenas atualizar meu .gitconfig não funcionou :(. Então eu tive que obter o CNTLM que usa autenticação NTLM. Tudo o que eu precisava fazer era apontar meu CNTLM para o servidor proxy da minha rede e, em seguida, apontar meu software gerenciador de atualização (como yum, apt-get ou ssh) para o proxy local no caso de operações git como clone, puxar o http.proxy era meu proxy configurado localmente com o servidor local..
Mayur Nagekar
9
Olá, como posso definir proxypass se tiver o caractere "@"? Eu sei que deve escapar este personagem, mas eu não sei como .. Obrigado
Patrick
13
@patricK Você pode usar %40como um substituto para a @string in username / password, embora eu não tenha testado isso sozinho. Espero que ajude. :-)
Sourav Ghosh
14
@patricK Posso confirmar que usar% 40 como um substituto para @ funciona. Parece que se um caractere especial não estiver funcionando, você deve tentar codificá-lo por URL. As codificações são encontrados aqui: w3schools.com/tags/ref_urlencode.asp
Jon
133

Isso funcionou para mim, no Windows XP, atrás de um firewall corporativo.

Não precisei instalar nenhum proxy local ou qualquer outro software além do git v1.771 em http://code.google.com/p/msysgit/downloads/list?can=3

$ git config --global http.proxy http://proxyuser:[email protected]:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:[email protected]/repoUser/repoName.git
$ git push origin master

proxyuser = o usuário proxy que me foi designado pelo departamento de TI; no meu caso, é o mesmo usuário do Windows que eu uso para fazer login no meu PC, o usuário do Active Directory

proxypwd = a senha do meu usuário proxy

proxy.server.com:8080 = o nome e a porta do proxy, obtive-o no Painel de Controle, Opções da Internet, Conexões, botão Configurações da LAN, botão Avançado na seção Servidor Proxy, use o nome do servidor e a porta na primeira linha (http) .

mygithubuser = o usuário que eu uso para fazer login no github.com

mygithubpwd = a senha do meu usuário do github.com

repoUser = o proprietário do usuário do repo

repoName = o nome do repo

alvaro
fonte
2
Viva, obrigado! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtmais certificados baixados conforme descrito em simplicidade.org/notes/archives/2011/06/… (graças a: stackoverflow.com/a/7206627/98528 ) fizeram isso por mim!
Akavelvel
3
Parece funcionar para mim, mas o git ainda não funciona quando eu peço para clonar um repositório usando o git://protocolo.
precisa saber é o seguinte
3
Alguns esclarecimentos sobre as informações da pablolic, com base no que funcionou para mim: 1) Se proxyuser for um login do Windows, deixe de fora o domínio do AD, inclua apenas o nome de usuário sem o domínio; 2) Os espaços no proxypwd devem ser codificados como "+". por exemplo, "Minha senha" deve ser inserida como "Minha + Senha".
Simon Tewsi
2
@ EdmundYeung99: sugiro substituir o símbolo @ por% 40. Ainda não tentei, mas acredito que seja a codificação de URL padrão.
Simon Tewsi
2
@ demongolem: Eu suspeito que você pode precisar codificar sua senha por URL (ainda não tentei, isso é apenas um palpite). Consulte a coluna UrlEncoded na tabela na seguinte resposta: stackoverflow.com/a/11236038/216440 No seu caso, isso significaria substituir o $ por% 24.
Simon Tewsi
52

Defina uma variável do sistema nomeada http_proxycom o valor de ProxyServer:Port. Essa é a solução mais simples. Respectivamente, use https_proxycomo daefu apontado nos comentários.

Definir gitproxy (como menciona sleske) é outra opção, mas isso requer um "comando", que não é tão simples quanto a solução acima.

Referências: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html

PlagueHammer
fonte
10
Ou use 'https_proxy' se estiver se conectando a um repositório https.
Daefu 06/12
1
@daefu: Não tenho certeza se você precisa definir https_proxy. Estou conectado a um repositório https e segui a primeira etapa das instruções do pablolic (ou seja, adicionar http.proxy ao arquivo de configuração do git). Isso foi o suficiente para mim.
Simon Tewsi
3
https_proxy foi necessário para mim. Definir apenas http_proxy não permitiu clonar um
repositório
@daefu +1 isso também funciona com viúvas GitHub - questão relacionada: stackoverflow.com/questions/16216176/...
azul-céu
4
@SimonTewsi @explunit Ao configurar variáveis ​​de ambiente, http_proxyé necessário para URLs HTTP e https_proxyé necessário para URLs HTTPS. Como alternativa, é possível definir apenas all_proxypara todos os URLs. Veja a ENVIRONMENTseção em curl (1) . No entanto, ao definir as opções do git-config, http.proxyé usado para URLs HTTP e HTTPS. Veja http.proxyem git-config (1) .
Susam Pal
43

Se a maneira da linha de comando de configurar seu servidor proxy não funcionar, provavelmente você pode editar .gitconfig (na raiz do seu perfil, que pode estar oculto em C: \ Documents and Settings e em alguma unidade de rede) e adicioná-lo :

[http]
    proxy = http://username:[email protected]:8080

YMMV, porém, isso cobre apenas a primeira etapa da configuração da linha de comando. Talvez você precise editar a configuração do sistema git e não faço ideia de onde eles ocultaram isso.

Randakar
fonte
1
"Você pode ter que editar também a configuração do sistema git". Não, geralmente não. O sistema e a configuração do usuário são combinados; definir o proxy em um dos dois deve ser suficiente.
S2 #
No meu caso, ele está localizado na minha máquina Windows em [git home] \ etc \ gitconfig - após a edição, funciona como um encanto!
Barmaley Red Star
Isso é especialmente útil se a linha de comando não gostar da sua senha devido a caracteres especiais.
Origem
37

Como alternativa ao uso git config --global http.proxy address:port, você pode definir o proxy na linha de comando:

git -c "http.proxy=address:port" clone https://...

A vantagem é que o proxy não está definido persistentemente. Em Bash, você pode definir um alias:

alias git-proxy='git -c "http.proxy=address:port"'
Steve Pitchers
fonte
22

Se você estiver usando o ubuntu, faça o seguinte ...

Etapa 1: instalar o saca-rolhas

$ sudo apt-get install corkscrew

Etapa 2: escreva um script chamado git-proxy.sh e adicione o seguinte

#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

Etapa 3: Tornar o Script Executável

$ chmod +x git-proxy.sh

Etapa 4: configurar o comando proxy para GIT, configurando a variável de ambiente

$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

Agora use os comandos git, como

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Sk Hasanujjaman
fonte
Você provavelmente deve usar em "$@"vez de $*. Veja o manual do seu shell para mais detalhes.
Hynek -Pichi- Vychodil
15

Enfrentou o mesmo problema por causa de vários .gitconfigarquivos no Windows, seguidos abaixo das etapas para corrigir o mesmo:

Etapa 1: abra o Git BASH

Etapa 2: procure .gitconfig, executando o seguinte comando:

git config --list --global --show-origin

Etapa 3: copie o conteúdo abaixo em .gitconfig:

[http]
    proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = [email protected]
Arpit Aggarwal
fonte
12

Tente colocar o seguinte no arquivo ~ / .gitconfig:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://
augustocbx
fonte
1
Eu tentei todas as coisas acima. Não foi até eu adicionar a entrada https listada aqui que eu pude trabalhar.
Brent Fisher
11

Para o protocolo git (git: // ...), instale o socat e escreva um script como:

#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

torne-o executável, coloque-o no seu caminho e no seu ~/.gitconfigconjunto core.gitproxycom o nome desse script.

ashutosh
fonte
Também funciona para janelas com o SOCAT da cygwin. usandosocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj
1
Pode ser usado set GIT_PROXY_COMMAND=path\to\scriptpara fazer o GIT usar o proxy sem mexer na configuração do git.
Davidpcj
Sim! Finalmente, a dica certa! Eu também precisava de autenticação: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <port>, proxyauth = <user>: <passwd> Encontrado aqui: gist.github.com/sit/49288
Joachim
11

Há algo que eu notei e quero compartilhar aqui:

git config --global http.proxy http://<proxy address>:<port number>

O método acima não funcionará para URLs ssh (ou seja, [email protected]:<user name>/<project name>.git):

git clone [email protected]:<user name>/<project name>.git // will not use the http proxy

E as coisas não mudarão se definirmos o SSH na porta HTTPS ( https://help.github.com/en/articles/using-ssh-over-the-https-port ) porque ela altera apenas a porta (22 por padrão ) à qual a conexão ssh se conecta.

(Não é um falante nativo de inglês, refine minhas palavras, se necessário)

miáo
fonte
7

Eu trabalho no Windows XP no trabalho (state / gov), então fiz minha pesquisa e encontrei isso aqui e funcionou para mim. Espero que isto ajude :)

A variável de ambiente http_proxy

Se você usa um servidor proxy ou firewall, pode ser necessário definir a variável de ambiente http_proxy para acessar alguns URLs da linha de comando. Exemplo: Instalando o ppm para perl ou aplicando o rpm no linux, atualizando o ubuntu

Defina a variável http_proxy com o nome do host ou o endereço IP do servidor proxy: http_proxy = http: // [proxy.example.org]

Se o servidor proxy exigir um nome de usuário e senha, inclua-os no seguinte formato: http_proxy = http: // [nome de usuário: [email protected]]

Se o servidor proxy usar uma porta diferente de 80, inclua o número da porta: http_proxy = http: // [nome do usuário: [email protected]: 8080]

Windows XP

  1. Abra o Painel de Controle e clique no ícone Sistema.
  2. Na guia Avançado, clique em Variáveis ​​de ambiente.
  3. Clique em Novo no painel Variáveis ​​do sistema.
  4. Adicione http_proxy com as informações de proxy apropriadas (veja os exemplos acima).

Linux, Solaris ou HP-UX

Defina a variável de ambiente http_proxy usando o comando específico para seu shell (por exemplo, definir ou exportar). Para tornar essa alteração persistente, adicione o comando ao arquivo de perfil apropriado para o shell. Por exemplo, no bash, adicione uma linha como a seguinte ao seu arquivo .bash_profile ou .bashrc:

  1. http_proxy = http: // [nome do usuário: senha @ nome do host: porta];
  2. exportar $ http_proxy
Shak Daniel
fonte
tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem
7

Além dessas respostas, achei útil considerar estes 2 pontos:

Pode ser necessário impor um esquema de autenticação:

[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

Além disso, normalmente com o esquema de autenticação NTLM, pode ser necessário fornecer explicitamente o domínio do AD.

No git bash:

echo %userdomain%

E atualize o http.proxy adequadamente:

git config --global http.proxy http://DOMAIN\\proxyuser:[email protected]:8080

De qualquer forma, a investigação pode ser ajudada adicionando logs CURL:

export GIT_CURL_VERBOSE=1
blacelle
fonte
Eu precisava adicionar proxyAuthMethod usando git config --global http.proxyAuthMethod basic. O Git gersion 2.8.3 não enviou nenhuma autenticação até definir esse parâmetro de configuração.
HeatfanJohn
5

Se você tiver tsocks ou proxychains instalados e configurados, poderá

$ tsocks git clone <you_repository>

ou

$ proxychains git clone <you_repository>

para torná-lo mais curto, criei um link de símbolo /usr/bin/ppara proxychainsque eu possa usá-lo assim

p git clone <you_repository>

e posso usá-lo para fazer proxy de qualquer comando,

p <cmd-need-be-proxied>

a propósito, proxychains não é atualizado por um longo tempo, você pode querer tentar proxychians-ng

fangxing
fonte
4

Configurando o proxy git no terminal

E se

  • você não deseja definir proxy para cada um dos seus projetos git manualmente, um por um
  • sempre quer usar o mesmo proxy para todos os seus projetos

Defina globalmente uma vez

git config --global http.proxy username:password@proxy_url:proxy_port
git config --global https.proxy username:password@proxy_url:proxy_port

se você deseja definir proxy para apenas um projeto git (pode haver algumas situações em que você não queira usar o mesmo proxy ou qualquer proxy para algumas conexões git)

//go to project root
cd /bla_bla/project_root
//set proxy for both http and https
git config http.proxy username:password@proxy_url:proxy_port
git config https.proxy username:password@proxy_url:proxy_port

se você deseja exibir as configurações atuais de proxy

git config --list 

se você deseja remover o proxy globalmente

git config --global --unset http.proxy
git config --global --unset https.proxy

se você deseja remover o proxy para apenas uma raiz git

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy
Add080bbA
fonte
3

aqui está a configuração de proxy

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>
hannad rehman
fonte
3

Eu segui a maioria das respostas recomendadas aqui. Primeiro, recebi o seguinte erro:

fatal: não é possível acessar ' https://github.com/folder/sample.git/ ': schannel: next InitializeSecurityContext falhou: erro desconhecido (0x80092012) - A função de revogação não pôde verificar a revogação do certificado.

Então eu tentei o seguinte comando por @Salim Hamidi

git config --global http.proxy http://proxyuser:[email protected]:8080

Mas eu recebi o seguinte erro:

fatal: não é possível acessar ' https://github.com/folder/sample.git/ ': código HTTP 407 recebido do proxy após CONNECT

Isso pode acontecer se o servidor proxy não puder verificar o certificado SSL. Portanto, queremos garantir que a verificação SSL esteja desativada (não recomendada para sites não confiáveis). Por isso, realizei as seguintes etapas, recomendadas pelo @Arpit, mas com pequenas alterações:

1.Primeiro, certifique-se de remover as configurações de proxy anteriores:

git config --global --unset http.proxy

2.Em seguida, liste e obtenha o conteúdo do gitconfig

git config --list --show-origin

3.Última atualização do conteúdo do arquivo gitconfig como abaixo:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:[email protected]:8080
sslverify = false
[https]
proxy = http://proxyuser:[email protected]:8080
sslverify = false
Wael Almadhoun
fonte
3

Eu tentei todas as respostas acima e nada funcionou para mim, pois houve um problema de codificação de senha de proxy.

Este comando funcionou:

git config --global http.proxy http://[email protected]:PortNumber 

Não digite a senha no seu comando. Ele solicitará dinamicamente quando você tentar se conectar a qualquer repositório git.

Ishtdeep Hora
fonte
Obrigado, isso funcionou para mim. Embora a configuração git config deve ser http.proxy
ochhii
nome de usuário não é suficiente. Senha também é necessária.
Dinith 21/11/19
use este código {git config --global http.proxy proxyuser: [email protected]: 8080 }
Dinith
2

Para usuários do Windows: se git configou set http_proxy=não funcionar, esta resposta pode ajudar:

substitua o git://protocolo do repositório git por http://. Observe que você precisará definir o http_proxyprimeiro.

DomTomCat
fonte
0

Depois de tentar incansavelmente todas as soluções desta página, minha solução foi usar a chave SSH!

  1. Open Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Abra seu provedor Git (Github, Bitbucket, etc.)
  4. Adicione copiar o conteúdo do arquivo id_rsa.pub na página de entrada do provedor Git (verifique seu perfil)
Janac Meena
fonte