Cliente GitHub Windows atrás de proxy

93

Estou tentando fazer o cliente GitHub para Windows funcionar. Estou em um computador corporativo Win 7 x64 protegido por proxy e firewall corporativo. Seguindo várias outras postagens e experimentando várias combinações de variáveis ​​de ambiente e variáveis ​​de configuração, descobri que a única maneira de fazer a clonagem e as atualizações por push funcionarem é usando a variável de ambiente HTTPS_PROXY, incluindo meu ID de usuário e senha de domínio corporativo completo.

Isso é inaceitável do ponto de vista da segurança. Existe alguma outra maneira de fazer isso funcionar?

Notas Adicionais:

O seguinte funcionou:

  • Adicione uma variável de ambiente chamada HTTPS_PROXYcom o valorhttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

O seguinte não funcionou:

  • Omitindo ID de usuário e senha da HTTPS_PROXYvariável
  • Usando uma variável de ambiente chamada HTTP_PROXY(não S)
  • Adicionando a http.proxyvariável ao arquivo de configuração global ( .gitconfig)
  • Adicionando a https.proxyvariável ao arquivo de configuração global

Em todos os casos, o cliente GitHub ainda não reconhece o proxy: O conteúdo do arquivo TheLog.txt sempre mostra o seguinte na inicialização:

[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Proxy information: (None)
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Couldn't fetch creds for proxy

E é seguido pela saída de várias tentativas de autenticação de proxy com falha, todas indicando "Credenciais ausentes."

Joshua Honig
fonte
2
Adicionar a variável de ambiente funcionou para mim, mas é uma solução inaceitável, pois expõe meu domínio / senha a qualquer aplicativo com acesso às variáveis ​​de ambiente.
Fabricio
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs explica que isso é causado pelo gui (que usa corretamente o proxy definido do Windows) chama msysgit nos bastidores para os comandos git. msysgit usa libcurl para solicitações http, que não usa as configurações de proxy do Windows. Há trabalho em andamento para consertar isso em várias áreas, incluindo libgit2sharp em github.com/libgit2/libgit2sharp .
Andrew Hill

Respostas:

131

Adicione essas entradas ao seu arquivo '.gitconfig' no diretório do usuário (vá para% USERPROFILE%):

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

E se você não quiser armazenar sua senha em texto simples, eu usaria um encaminhador de proxy local como o CNTLM, que permite direcionar todo o tráfego através dele e pode armazenar as senhas em hash.


Ao contrário da pergunta original, se você não se importa se sua senha está em texto simples, adicione o seguinte:

[http]
    proxy = http://<username>:<password>@<proxy address>:<proxy port>

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>
Sogger
fonte
veja a resposta da edufinn se precisar de autorização no proxy: proxy = http: // <username>: <password> @ <proxy corporativo>: <port>
Jan Hommes
1
@JanHommes A pergunta original era especificamente perguntando sobre como fazer isso sem armazenar a senha em texto simples
Sogger
@Sogger Se minha senha incluir o caractere "@", como devo configurá-la, obrigado pela sua ajuda.
litoral
4
Se você estiver usando CNTLM, certifique-se de apontar o proxy para em 127.0.0.1vez de localhost, conforme sugerido. No Windows, parece que localhost aponta primeiro para o endereço IPv6, que o CNTLM não escuta. Como tal, o git irá esperar até o tempo limite (vários minutos) antes de mudar para o endereço IPv4.
Ronan Paixão
14

Tentei tudo de cima - e não tive sucesso, a única coisa que me ajudou foi CNTLM - http://cntlm.sourceforge.net/ .

Instale e execute cntlm -H, em seguida, autentique no proxy corp, edite o arquivo cntlm.ini com a saída de cntlm e reinicie o serviço do Windows. Atualize .gitconfig com:

[https] proxy = localhost:3128
[http] proxy = localhost:3128

Agora o cntlm fará toda a autenticação e você poderá usar o GitHub (e Dropbox, aliás) por trás do proxy corpor. Pelo menos até a próxima mudança de senha :) (então faça cntlm -H coisas novamente)

Anton
fonte
2
Se ações remotas como git clone, fetch ou pull demoram muito para serem concluídas, tente mudar o .gitconfig para: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm
reiniciar o serviço do Windows?
Mukus
@Mukus cntlm - roda em modo de serviço após a instalação, se bem me lembro.
Anton
Fiz a alteração, reiniciei e ainda não funciona.
Mukus
8

Consegui fazer o GitHub Shell funcionar com nosso proxy corporativo. Estou iniciando o GitHub Shell e executo o seguinte comando:

export http_proxy=http://<username>:<password>@<corporate proxy>:3128

Eu realmente gostaria de fazer a GUI funcionar também. Mas não quero definir a variável de ambiente global do Windows que contém minhas informações de credenciais corporativas.

Estranhamente, o GitHub GUI Client é capaz de se conectar ao GitHub para autenticação do usuário, mas o único problema é clonar, puxar e enviar projetos de e para o GitHub. Parece que o problema é com a implementação do git. Consegui configurar o git para ser executado por meio de nosso proxy sem colocar minhas credenciais nas configurações globais do git e ele estava pedindo minhas credenciais durante a execução de solicitações pull ou push. Mas isso estava funcionando apenas no Git Shell.

Edufinn
fonte
Isso porque provavelmente o GitHub se autentica internamente com algum componente que extrai informações de proxy do sistema operacional, possivelmente alguma solução SingleSignOn, enquanto o próprio git não. Eu tenho o mesmo problema com SourceTree. Eu também descobri que quando o git funciona, leva um tempo impossivelmente longo para funcionar, tornando o uso do SourceTree impossível.
Ronan Paixão
Provavelmente, o Github está tentando usar a porta git, que normalmente é filtrada, pois não é comum para o pessoal de TI ver. Veja minha resposta para uma alternativa.
dragon788
7

Se você estiver usando o GitHub para Windows em uma empresa, há grandes chances de estar por trás de um grande Firewall / Proxy Corporativo ruim. O GitHub para Windows ainda não possui os parâmetros de proxy em sua GUI para definir opções.

Para configurar o GitHub para Windows para usar seu proxy corporativo, edite o arquivo .gitconfig normalmente encontrado em C: \ Users \ .gitconfig ou C: \ Documents & Settings \ .gitconfig

Feche o GitHub para Windows; Em .gitconfig, basta adicionar

[https] proxy = proxy.yourcompany.com:port

Manivannan
fonte
4

Também encontrei esse problema e tentei aprofundá-lo um pouco (desmontei o cliente).

O trecho de código que gera as mensagens de log que estamos vendo é o seguinte:

private static void LogProxyServerConfiguration()
{
    WebProxy defaultProxy = WebProxy.GetDefaultProxy();
    string str = defaultProxy.Address != (Uri)null ? defaultProxy.Address.ToString() : "(None)";
    StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy information: {0}", str);
    try
    {
        if (defaultProxy.Credentials == null)
        {
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Couldn't fetch creds for proxy", new object[0]);
        }
        else
        {
            NetworkCredential credential = defaultProxy.Credentials.GetCredential(GitHubClient.GitHubDotComUri, "Basic");
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy is authenticated: {0}", credential != null && !string.IsNullOrWhiteSpace(credential.UserName));
        }
    }
    catch (Exception ex)
    {
        StartupLogger.log.InfoException("Couldn't fetch creds for proxy", ex);
    }
}

Portanto, este bloco registra apenas as informações de proxy configuradas no IE . A mensagem de log parece não ter nenhuma relação com o que configuramos nos arquivos de configuração ou variáveis ​​ambientais.

DustinTheDev
fonte
3

Eu não sei sobre o seu firewall, mas meu campus usa proxy

você usa algum git gui? EDITAR : acabei de notar que você está usando o cliente github para Windows

Estou usando o tortoisegit e é muito fácil configurar o proxy. Basta clicar com o botão direito em qualquer lugar, tortoisegit> rede, habilitar o servidor proxy e definir o endereço do servidor, nome de usuário e senha. feito

tanto quanto me lembro, o tortoisegit também funciona fora da caixa com o github.

Bysreg
fonte
2

Aqui está a maneira de definir o proxy no github

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

Aqui na minha faculdade não temos nome de usuário e senha, portanto, se o IP da faculdade for 172.16.10.10 e a porta for 8080

git config --global http.proxy http://172.16.10.10:8080
git config --global https.proxy http://172.16.10.10:8080

PS -> eu recomendo usar esse método para set proxy como as coisas vão cair no lugar como você vai aprender mais
Fonte

Royatirek
fonte
1

Achei este blog útil. Ele descreve o proxy ntlmaps . Provavelmente é menos seguro, mas funcionou bem. Não consegui fazer o cntlm funcionar.

Aksakal quase certamente binário
fonte
1

Para nós, a solução envolveu duas coisas diferentes. Primeiro, conforme descrito na resposta de Sogger, você precisa adicionar as entradas ao seu .gitconfigarquivo, localizado em %USERPROFILE%.

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

Em segundo lugar, (e essa era a peça que faltava para nós), você precisa configurar uma exceção no servidor proxy para permitir o tráfego de proxy não autenticado para*.github.com

No iPrism, é assim: insira a descrição da imagem aqui

O problema não é tanto o proxy, mas a autenticação . Ignorar o requisito de autenticação permite que a comunicação necessária clone e trabalhe com projetos usando o cliente de desktop GitHub.

Observe também que essa abordagem não exigia o armazenamento de credenciais de proxy no .gitconfigarquivo.

AdamsTips
fonte