Cliente de Windows de GitHub detrás del proxy

93

Estoy tratando de que funcione el cliente de GitHub para Windows. Estoy en una computadora corporativa Win 7 x64 detrás de un servidor proxy y un firewall corporativos. Después de varias otras publicaciones y experimentando con múltiples combinaciones de variables de entorno y variables de configuración, he encontrado que la única forma de hacer que la clonación y las actualizaciones de inserción funcionen es mediante el uso de la variable de entorno HTTPS_PROXY, incluida mi ID de usuario y contraseña de dominio corporativo completo.

Esto es inaceptable desde el punto de vista de la seguridad. ¿Hay alguna otra forma de hacer que esto funcione?

Notas adicionales:

Lo siguiente funcionó:

  • Agrega una variable de entorno llamada HTTPS_PROXYcon el valorhttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

Lo siguiente no funcionó:

  • Omitir la identificación de usuario y la contraseña de la HTTPS_PROXYvariable
  • Usando una variable de entorno llamada HTTP_PROXY(no S)
  • Añadiendo el http.proxy variable al archivo de configuración global ( .gitconfig)
  • Añadiendo el https.proxy variable al archivo de configuración global

En todos los casos, el cliente de GitHub aún no reconoce el proxy: El contenido del archivo TheLog.txt siempre muestra lo siguiente al inicio:

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

Y es seguido por el resultado de varios intentos fallidos de autenticación de proxy, todos los cuales indican "Faltan credenciales".

Joshua Honig
fuente
2
Agregar la variable de entorno me resultó útil, pero es una solución inaceptable, ya que expone mi dominio / contraseña a cualquier aplicación con acceso a las variables de entorno.
Fabricio
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs explica que esto se debe a que la interfaz gráfica de usuario (que usa correctamente el proxy de Windows) llama a msysgit detrás de escena para los comandos git. msysgit usa libcurl para solicitudes http, que no usa la configuración del proxy de Windows. Se está trabajando para solucionar este problema en varias áreas, incluso con libgit2sharp en github.com/libgit2/libgit2sharp .
Andrew Hill

Respuestas:

131

Agregue estas entradas a su archivo '.gitconfig' en su directorio de usuario (vaya a% USERPROFILE%):

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

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

Y si no desea almacenar su contraseña en texto plano, usaría un reenviador de proxy local como CNTLM que le permite dirigir todo el tráfico a través de él y puede almacenar las contraseñas con hash.


A diferencia de la pregunta original, si no le importa si su contraseña está en texto plano, agregue lo siguiente:

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

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>
Sogger
fuente
vea la respuesta de edufinn si necesita autorización contra el proxy: proxy = http: // <nombre de usuario>: <contraseña> @ <proxy corporativo>: <puerto>
Jan Hommes
1
@JanHommes La pregunta original era específicamente sobre cómo hacerlo sin almacenar la contraseña en texto plano
Sogger
@Sogger Si mi contraseña incluye el carácter "@", ¿cómo debo configurar la contraseña? Gracias por su ayuda.
Costa
4
Si está utilizando CNTLM, asegúrese de apuntar al proxy en 127.0.0.1lugar de localhost, como se sugiere. En Windows, parece que localhost apunta primero a la dirección IPv6, que CNTLM no escucha. Como tal, git esperará hasta el tiempo de espera (varios minutos) antes de cambiar a la dirección IPv4.
Ronan Paixão
14

Probé todo lo anterior y no tuve éxito, lo único que me ayudó es CNTLM - http://cntlm.sourceforge.net/ .

Instálelo y ejecute cntlm -H, luego autentíquese en corp proxy, edite el archivo cntlm.ini con la salida de cntlm, reinicie el servicio de Windows. Actualice .gitconfig con:

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

Ahora cntlm hará toda la autenticación, y podrás usar GitHub (y Dropbox, por cierto) detrás del proxy corp. Al menos hasta el próximo cambio de contraseña :) (que vuelva a hacer cntlm -H)

Anton
fuente
2
Si las acciones remotas como git clone, fetch o pull tardan mucho en completarse, intente cambiar el .gitconfig a: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm
reiniciar qué servicio de Windows?
Mukus
@Mukus cntlm: se ejecuta en modo de servicio después de la instalación, si no recuerdo mal.
Anton
Hice el cambio, lo reinicié y todavía no funciona.
Mukus
8

Pude hacer que GitHub Shell funcionara con nuestro proxy corporativo. Estoy iniciando GitHub Shell y ejecuto el siguiente comando:

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

Realmente me gustaría hacer que la GUI también funcione. Pero no quiero configurar la variable de entorno global de Windows que contiene la información de mi credencial corporativa.

Curiosamente, el cliente GUI de GitHub puede conectarse a GitHub para la autenticación del usuario, pero el único problema es la clonación, extracción y envío de proyectos desde y hacia GitHub. Parece que el problema está en la implementación de git. Pude configurar git para que se ejecutara a través de nuestro proxy sin poner mis credenciales en la configuración global de git y estaba solicitando mis credenciales mientras realizaba solicitudes de extracción o inserción. Pero eso solo funcionaba en Git Shell.

edufinn
fuente
Eso es porque probablemente GitHub se autentica internamente con algún componente que extrae información de proxy del sistema operativo, posiblemente alguna solución SingleSignOn, mientras que git en sí no lo hace. Tengo el mismo problema con SourceTree. También descubrí que cuando git funciona, lleva un tiempo increíblemente largo para funcionar, lo que hace imposible el uso de SourceTree.
Ronan Paixão
Es probable que esto se deba a que Github está tratando de usar el puerto git, que generalmente se filtra, ya que no es común para que lo vea la gente de TI. Vea mi respuesta para una alternativa.
dragon788
7

Si está utilizando GitHub para Windows en una empresa, es muy probable que esté detrás de un firewall / proxy corporativo muy malo. GitHub para Windows aún no tiene los parámetros de proxy en su GUI para configurar las Opciones.

Para configurar GitHub para Windows para usar su proxy corporativo, edite el archivo .gitconfig que normalmente se encuentra en C: \ Users \ .gitconfig o C: \ Documents & Settings \ .gitconfig

Cierre GitHub para Windows; En .gitconfig, simplemente agregue

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

Manivannan
fuente
4

También me encontré con este problema y traté de profundizar un poco en él también (desmonte el cliente).

El fragmento de código que genera los mensajes de registro que estamos viendo es el siguiente:

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

Entonces, este bloque solo registra la información del proxy que está configurada en IE . El mensaje de registro parece no tener relación con lo que hemos configurado en los archivos de configuración o las variables ambientales.

DustinTheDev
fuente
3

No sé sobre su firewall, pero mi campus usa proxy

¿usas algún git gui? EDITAR : acabo de notar que estás usando el cliente github para Windows

Estoy usando tortoisegit y es muy fácil configurar el proxy. Simplemente haga clic derecho en cualquier lugar, tortoisegit> red, habilite el servidor proxy y configure la dirección del servidor, el nombre de usuario y la contraseña. hecho

por lo que recuerdo, tortoisegit también funciona de forma inmediata con github.

bysreg
fuente
2

Aquí está la forma de configurar el proxy en github

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

Aquí en mi universidad no tenemos nombre de usuario y contraseña, así que si nuestra IP de la universidad es 172.16.10.10 y el puerto es 8080

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

PS -> Yo recomiendo usar este método para configurar proxy como las cosas van a caer en su lugar como aprenderá más
Fuente

Royatirek
fuente
1

Encontré este blog útil. Describe el proxy ntlmaps . Probablemente sea menos seguro, pero funcionó sin problemas. No pude hacer funcionar cntlm.

Aksakal casi seguramente binario
fuente
1

Para nosotros, la solución involucró dos cosas diferentes. Primero, como se describe en la respuesta de Sogger, debe agregar las entradas a su .gitconfigarchivo, ubicado en %USERPROFILE%.

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

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

En segundo lugar, (y esta era la pieza que nos faltaba), debe configurar una excepción en el servidor proxy para permitir que los usuarios no autenticados tráfico proxy*.github.com

En iPrism, se ve así: ingrese la descripción de la imagen aquí

El problema no es tanto el proxy, sino la autenticación . Eludir el requisito de autenticación permite que la comunicación necesaria se clone y trabaje con proyectos utilizando el cliente de escritorio GitHub.

También tenga en cuenta que este enfoque no requirió almacenar credenciales de proxy en el .gitconfigarchivo.

AdamsTips
fuente