Client Windows GitHub dietro proxy


93

Sto cercando di far funzionare il client GitHub per Windows. Sono su un computer aziendale Win 7 x64 dietro un proxy e un firewall aziendali. Seguendo vari altri post e sperimentando più combinazioni di variabili di ambiente e variabili di configurazione, ho trovato che l'unico modo per ottenere la clonazione e il push degli aggiornamenti è utilizzare la variabile di ambiente HTTPS_PROXY, inclusi l'ID utente e la password del mio dominio aziendale completo.

Questo è inaccettabile dal punto di vista della sicurezza. C'è un altro modo per farlo funzionare?

Note aggiuntive:

Il seguente ha funzionato:

  • Aggiungi una variabile d'ambiente chiamata HTTPS_PROXYcon il valorehttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

Quanto segue non ha funzionato:

  • Omettere ID utente e password dalla HTTPS_PROXYvariabile
  • Usare una variabile d'ambiente chiamata HTTP_PROXY(no S)
  • Aggiunta della http.proxyvariabile al file di configurazione globale ( .gitconfig)
  • Aggiunta della https.proxyvariabile al file di configurazione globale

In tutti i casi, il client GitHub continua a non riconoscere il proxy: il contenuto del file mostra TheLog.txt sempre quanto segue all'avvio:

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

Ed è seguito dall'output di diversi tentativi di autenticazione proxy non riusciti, che indicano tutti "Mancano le credenziali".


2
L'aggiunta della variabile di ambiente ha fatto il trucco per me, ma è una soluzione inaccettabile, poiché espone il mio dominio / password a qualsiasi applicazione con accesso alle variabili di ambiente.
Fabricio

jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs spiega che ciò è causato dalla gui (che utilizza correttamente il proxy di Windows) chiama msysgit dietro le quinte per i comandi git. msysgit utilizza libcurl per le richieste http, che non utilizza le impostazioni del proxy di Windows. Sono in corso lavori per risolvere questo problema in diverse aree, incluso libgit2sharp su github.com/libgit2/libgit2sharp .
Andrew Hill

Risposte:


131

Aggiungi queste voci al tuo file ".gitconfig" nella tua directory utente (vai a% USERPROFILE%):

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

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

E se non vuoi memorizzare la tua password in testo normale, utilizzerei un proxy forwarder locale come CNTLM che ti consente di indirizzare tutto il traffico attraverso di esso e può memorizzare le password con hash.


A differenza della domanda originale, se non ti interessa se la tua password è in testo normale, aggiungi questi:

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

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

vedi la risposta di edufinn se hai bisogno dell'autorizzazione contro il proxy: proxy = http: // <username>: <password> @ <corporate proxy>: <port>
Jan Hommes

1
@JanHommes La domanda originale chiedeva specificamente come farlo senza memorizzare la password in chiaro
Sogger

@Sogger Se la mia password include il carattere "@", come devo configurare la password, grazie per il vostro aiuto.
litorale


4
Se stai usando CNTLM, assicurati di puntare il proxy a 127.0.0.1invece di localhost, come suggerito. In Windows, sembra che localhost punti prima all'indirizzo IPv6, che CNTLM non ascolta. In quanto tale, git attenderà fino al timeout (diversi minuti) prima di passare all'indirizzo IPv4.
Ronan Paixão

14

Ho provato tutto quanto sopra - e non ci sono riuscito, l'unica cosa che mi ha aiutato è CNTLM - http://cntlm.sourceforge.net/ .

Installalo ed esegui cntlm -H, quindi autenticati nel proxy corp, modifica il file cntlm.ini con l'output di cntlm, riavvia il servizio Windows. Aggiorna .gitconfig con:

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

Ora cntlm eseguirà tutta l'autenticazione e sarai in grado di utilizzare GitHub (e Dropbox, btw) dietro il proxy aziendale. Almeno fino alla prossima modifica della password :) (che fare di nuovo cntlm -H)


2
Se il completamento di azioni remote come git clone, fetch o pull richiede molto tempo, prova a cambiare il file .gitconfig in: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm

riavviare quale servizio di Windows?
Mukus

@ Mukus cntlm - funziona in modalità di servizio dopo l'installazione, se ricordo bene.
Anton

Ho apportato la modifica, l'ho riavviata e ancora non funziona.
Mukus

8

Sono stato in grado di far funzionare GitHub Shell con il nostro proxy aziendale. Sto avviando GitHub Shell ed eseguo il seguente comando:

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

Mi piacerebbe davvero che anche la GUI funzionasse. Ma non voglio impostare la variabile di ambiente globale di Windows che contiene le informazioni sulle mie credenziali aziendali.

Stranamente GitHub GUI Client è in grado di connettersi a GitHub per l'autenticazione dell'utente, ma l'unico problema è con la clonazione, il pull e il push dei progetti da e in GitHub. Sembra che il problema sia con l'implementazione di git. Sono stato in grado di configurare git per eseguire attraverso il nostro proxy senza mettere le mie credenziali nelle impostazioni globali di git e stava chiedendo le mie credenziali durante l'esecuzione di richieste pull o push. Ma funzionava solo in Git Shell.


Questo perché probabilmente GitHub si autentica internamente con qualche componente che estrae le informazioni proxy dal sistema operativo, forse qualche soluzione SingleSignOn, mentre git stesso no. Ho lo stesso problema con SourceTree. Ho anche scoperto che quando git funziona, ci vuole un tempo incredibilmente lungo per funzionare, rendendo impossibile l'utilizzo di SourceTree.
Ronan Paixão

Ciò è probabile perché Github sta cercando di utilizzare la porta git che è tipicamente filtrata in quanto non è comune per le persone IT. Vedi la mia risposta per un'alternativa.
dragon788

7

Se utilizzi GitHub per Windows in un'azienda, è molto probabile che tu sia dietro a un firewall / proxy aziendale grave. GitHub per Windows non ha ancora i parametri proxy nella sua GUI per l'impostazione delle Opzioni.

Per configurare GitHub per Windows in modo che utilizzi il proxy aziendale, modifica il file .gitconfig che in genere si trova in C: \ Users \ .gitconfig o C: \ Documents & Settings \ .gitconfig

Chiudi GitHub per Windows; In .gitconfig, aggiungi semplicemente

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


4

Ho anche riscontrato questo problema e ho cercato di approfondirlo un po '(ha smontato il client).

La parte di codice che genera i messaggi di log che stiamo vedendo è la seguente:

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);
    }
}

Quindi questo blocco registra solo le informazioni sul proxy configurate in IE . Il messaggio di log sembra non avere alcuna relazione con ciò che abbiamo impostato nei file di configurazione o nelle variabili ambientali.


3

Non so del tuo firewall, ma il mio campus usa il proxy

usi qualche git gui? EDIT : ho appena notato che stai usando il client GitHub per Windows

Sto usando tortoisegit ed è molto facile impostare il proxy. Basta fare clic con il pulsante destro del mouse ovunque, tortoisegit> rete, abilitare il server proxy e impostare l'indirizzo del server, il nome utente e la password. fatto

per quanto ricordo, tortoisegit funzionerà anche out-of-the-box con github.


2

Ecco il modo per impostare il proxy in GitHub

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

Qui nel mio college non abbiamo nome utente e password, quindi se il nostro ip del college è 172.16.10.10 e la porta è 8080

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

PS -> Suggerirei di utilizzare questo metodo per impostare il proxy poiché le cose andranno a posto man mano che imparerai ulteriormente
Source



1

Per noi, la soluzione implicava due cose diverse. Innanzitutto, come descritto nella risposta di Sogger, devi aggiungere le voci al tuo .gitconfigfile, che si trova in %USERPROFILE%.

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

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

Secondo, (e questo era il pezzo mancante per noi), è necessario configurare un'eccezione sul server proxy per consentire al traffico proxy non autenticato di*.github.com

In iPrism, assomiglia a questo: inserisci qui la descrizione dell'immagine

Il problema non è tanto il proxy, ma l' autenticazione . Ignorare il requisito di autenticazione consente la comunicazione necessaria per clonare e lavorare con i progetti utilizzando il client desktop GitHub.

Si noti inoltre che questo approccio non richiedeva l'archiviazione delle credenziali proxy nel .gitconfigfile.

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.