Client Windows GitHub derrière un proxy

93

J'essaie de faire fonctionner le client GitHub pour Windows. Je suis sur un ordinateur d'entreprise Win 7 x64 derrière un proxy d'entreprise et un pare-feu. À la suite de divers autres articles et en expérimentant plusieurs combinaisons de variables d'environnement et de variables de configuration, j'ai trouvé que le seul moyen de faire fonctionner le clonage et de pousser les mises à jour est d'utiliser la variable d'environnement HTTPS_PROXY, y compris mon ID d'utilisateur et mon mot de passe de domaine d'entreprise complet.

C'est inacceptable du point de vue de la sécurité. Y a-t-il un autre moyen de faire fonctionner cela?

Notes complémentaires:

Ce qui suit a fonctionné:

  • Ajouter une variable d'environnement appelée HTTPS_PROXYavec la valeurhttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

Ce qui suit n'a pas fonctionné:

  • Omettre l'ID utilisateur et le mot de passe de la HTTPS_PROXYvariable
  • Utilisation d'une variable d'environnement appelée HTTP_PROXY(non S)
  • Ajout de la http.proxyvariable au fichier de configuration globale ( .gitconfig)
  • Ajout de la https.proxyvariable au fichier de configuration globale

Dans tous les cas, le GitHub client ne reconnaît toujours pas le proxy: Le contenu du fichier TheLog.txt toujours montre ce qui suit au démarrage:

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

Et est suivi par la sortie de plusieurs tentatives d'authentification de proxy échouées, qui indiquent toutes "Les informations d'identification sont manquantes."

Joshua Honig
la source
2
L'ajout de la variable d'environnement a fait l'affaire pour moi, mais c'est une solution inacceptable, car elle expose mon domaine / mot de passe à toute application ayant accès aux variables d'environnement.
Fabricio
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs explique que cela est dû au fait que l' interface graphique (qui utilise correctement le proxy de Windows) appelle msysgit dans les coulisses des commandes git. msysgit utilise libcurl pour les requêtes http, qui n'utilise pas les paramètres de proxy Windows. Des travaux sont en cours pour résoudre ce problème dans plusieurs domaines, notamment avec libgit2sharp sur github.com/libgit2/libgit2sharp .
Andrew Hill

Réponses:

131

Ajoutez ces entrées à votre fichier '.gitconfig' dans votre répertoire utilisateur (accédez à% USERPROFILE%):

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

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

Et si vous ne souhaitez pas stocker votre mot de passe en texte brut, j'utiliserais un expéditeur de proxy local comme CNTLM qui vous permet de diriger tout le trafic à travers celui-ci et de stocker les mots de passe hachés.


Contrairement à la question d'origine, si vous ne vous souciez pas de savoir si votre mot de passe est en texte brut, ajoutez-les:

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

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>
Sogger
la source
voir edufinn answer si vous avez besoin d'une autorisation contre le proxy: proxy = http: // <username>: <password> @ <corporate proxy>: <port>
Jan Hommes
1
@JanHommes La question initiale demandait spécifiquement comment le faire sans stocker le mot de passe en texte clair
Sogger
@Sogger Si mon mot de passe contient le caractère «@», comment dois-je configurer le mot de passe, merci pour votre aide.
littoral
4
Si vous utilisez CNTLM, assurez-vous de pointer le proxy vers 127.0.0.1au lieu de localhost, comme suggéré. Sous Windows, il semble que localhost pointe d'abord vers l'adresse IPv6, que CNTLM n'écoute pas. En tant que tel, git attendra le délai d'attente (plusieurs minutes) avant de passer à l'adresse IPv4.
Ronan Paixão
14

J'ai tout essayé - et je n'ai pas réussi, la seule chose qui m'a aidé est CNTLM - http://cntlm.sourceforge.net/ .

Installez-le et exécutez cntlm -H, puis authentifiez-vous auprès du proxy corp, modifiez le fichier cntlm.ini avec la sortie de cntlm, redémarrez le service Windows. Mettez à jour .gitconfig avec:

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

Maintenant, cntlm fera toute l'authentification et vous pourrez utiliser GitHub (et Dropbox, btw) derrière le proxy corp. Au moins jusqu'au prochain changement de mot de passe :) (que refaire cntlm -H)

Anton
la source
2
Si des actions à distance telles que git clone, fetch ou pull prennent beaucoup de temps, essayez de basculer le .gitconfig vers: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm
redémarrer quel service Windows?
Mukus
@Mukus cntlm - il fonctionne en mode service après l'installation, si je me souviens bien.
Anton
J'ai fait le changement, l'ai redémarré et cela ne fonctionne toujours pas.
Mukus du
8

J'ai pu faire fonctionner GitHub Shell avec notre proxy d'entreprise. Je démarre GitHub Shell et exécute la commande suivante:

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

J'aimerais vraiment que l'interface graphique fonctionne aussi. Mais je ne veux pas définir la variable d'environnement globale Windows qui contient mes informations d'identification d'entreprise.

Étrangement, le client GUI GitHub est capable de se connecter à GitHub pour l'authentification des utilisateurs, mais le seul problème est le clonage, l'extraction et le transfert de projets depuis et vers GitHub. Il semble que le problème vient de l'implémentation de git. J'ai pu configurer git pour qu'il s'exécute via notre proxy sans mettre mes informations d'identification dans les paramètres globaux de git et il me demandait mes informations d'identification lors de l'exécution de requêtes pull ou push. Mais cela ne fonctionnait que dans Git Shell.

edufinn
la source
C'est probablement parce que GitHub s'authentifie en interne avec un composant qui extrait les informations de proxy du système d'exploitation, peut-être une solution SingleSignOn, contrairement à git lui-même. J'ai le même problème avec SourceTree. J'ai également constaté que lorsque git fonctionne, cela prend un temps incroyablement long, rendant l'utilisation de SourceTree impossible.
Ronan Paixão
Cela est probablement dû au fait que Github essaie d'utiliser le port git qui est généralement filtré car ce n'est pas courant pour les informaticiens. Voir ma réponse pour une alternative.
dragon788
7

Si vous utilisez GitHub pour Windows dans une entreprise, il y a de fortes chances que vous soyez derrière un gros pare-feu / proxy d'entreprise. GitHub pour Windows n'a pas encore les paramètres de proxy dans son interface graphique pour définir les options.

Pour configurer GitHub pour Windows afin d'utiliser votre proxy d'entreprise, modifiez le fichier .gitconfig généralement trouvé dans C: \ Users \ .gitconfig ou C: \ Documents & Settings \ .gitconfig

Fermez GitHub pour Windows; Dans .gitconfig, ajoutez simplement

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

Manivannan
la source
4

J'ai également rencontré ce problème et j'ai essayé de creuser un peu plus (démonté le client).

Le morceau de code qui génère les messages de journal que nous voyons est le suivant:

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

Ainsi, ce bloc enregistre uniquement les informations de proxy configurées dans IE . Le message du journal semble n'avoir aucune incidence sur ce que nous avons configuré dans les fichiers de configuration ou les variables d'environnement.

DustinTheDev
la source
3

Je ne connais pas votre pare-feu, mais mon campus utilise un proxy

utilisez-vous une interface graphique git? EDIT : vient de remarquer que vous utilisez le client github pour Windows

J'utilise tortoisegit et il est très facile de définir le proxy. Faites un clic droit n'importe où, tortoisegit> réseau, activez le serveur proxy et définissez l'adresse du serveur, le nom d'utilisateur et le mot de passe. terminé

autant que je me souvienne, tortoisegit fonctionnera également avec github.

bysreg
la source
2

Voici la façon de définir un proxy dans github

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

Ici, dans mon université, nous n'avons ni nom d'utilisateur ni mot de passe, donc si notre adresse IP est 172.16.10.10 et le port 8080

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

PS -> Je recommanderais d'utiliser cette méthode pour définir le proxy car les choses se mettront en place au fur et à mesure que vous en apprendrez plus
Source

Royatirek
la source
1

J'ai trouvé ce blog utile. Il décrit le proxy ntlmaps . C'est probablement moins sûr, mais a fonctionné sans problème. Je n'ai pas pu faire fonctionner le cntlm.

Aksakal presque sûrement binaire
la source
1

Pour nous, la solution impliquait deux choses différentes. Tout d'abord, comme décrit dans la réponse de Sogger, vous devez ajouter les entrées à votre .gitconfigfichier, situé dans %USERPROFILE%.

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

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

Deuxièmement, (et c'était la pièce manquante pour nous), vous devez configurer une exception sur le serveur proxy pour autoriser le trafic proxy non authentifié à*.github.com

Dans iPrism, cela ressemble à ceci: entrez la description de l'image ici

Le problème n'est pas tant le proxy, mais l' authentification . Le contournement de l'exigence d'authentification permet à la communication nécessaire de cloner et de travailler avec des projets à l'aide du client de bureau GitHub.

Notez également que cette approche ne nécessitait pas de stocker les informations d'identification du proxy dans le .gitconfigfichier.

AdamsConseils
la source