La configuración del proxy de Git implica configurar los ajustes http.proxy y https.proxy de Git, o aprovechar variables de entorno como HTTP_PROXY y HTTPS_PROXY, o usar ProxyCommand dentro de las configuraciones SSH para operaciones Git basadas en SSH, para enrutar el tráfico a través de un servidor intermediario.
Comprensión de los Requisitos del Proxy de Git
Los firewalls corporativos, las políticas de seguridad de red o el acceso restringido a internet a menudo requieren enrutar el tráfico de Git a través de un servidor proxy. Esto se aplica a operaciones como git clone, git fetch, git pull y git push. El método de configuración depende del protocolo de la URL de Git: https:// (o http://) utiliza proxies HTTP/HTTPS, mientras que ssh:// (o git@) utiliza métodos de proxy específicos de SSH.
Configuración del Proxy Git HTTP/HTTPS
Para repositorios Git accedidos a través de URLs https:// o http://, Git utiliza configuraciones de proxy HTTP/HTTPS.
Método de Configuración de Git (git config)
Este es el método recomendado para configurar proxies HTTP/HTTPS para Git. Las configuraciones pueden ser globales (para todos los repositorios) o específicas para un solo repositorio.
Configuración Global
Para configurar un proxy globalmente para todos los repositorios Git en un sistema:
# Para proxy HTTP (ej., para URLs https://github.com a través de un proxy http)
git config --global http.proxy http://proxy.example.com:8080
# Para proxy HTTPS (ej., para URLs https://github.com a través de un proxy https)
# Nota: A menudo, un proxy HTTPS se configura de manera similar a un proxy HTTP,
# pero el tráfico se tuneliza explícitamente.
git config --global https.proxy http://proxy.example.com:8080
Si el proxy requiere autenticación:
git config --global http.proxy http://username:password@proxy.example.com:8080
git config --global https.proxy http://username:password@proxy.example.com:8080
Por seguridad, en lugar de incrustar la contraseña directamente en la URL, Git puede solicitar credenciales o recuperarlas de un ayudante de credenciales. Omitir la contraseña hará que Git la solicite.
Configuración por Repositorio
Para configurar un proxy para un repositorio específico, navegue al directorio raíz del repositorio y omita la bandera --global:
cd /path/to/my/repo
git config http.proxy http://proxy.example.com:8080
git config https.proxy http://proxy.example.com:8080
Estas configuraciones se almacenarán en el archivo .git/config de ese repositorio.
Deshabilitar Proxy para Hosts Específicos
Para omitir el proxy para ciertos dominios (ej., servidores Git internos), use http.noProxy:
git config --global http.noProxy "localhost,127.0.0.1,*.internal.com"
Se pueden separar múltiples hosts con comas.
Verificación de Certificados SSL
En entornos corporativos que utilizan proxies transparentes o de intercepción (proxies MITM), la verificación de certificados SSL de Git puede fallar debido a que el proxy presenta su propio certificado en lugar del del servidor de origen.
Para solucionar esto, configure Git para que confíe en el certificado de CA raíz corporativo:
git config --global http.sslCAInfo /path/to/corporate/ca-cert.pem
Alternativamente, y no recomendado para entornos de producción debido a riesgos de seguridad, la verificación SSL puede deshabilitarse:
git config --global http.sslVerify false
Esto omite la validación de certificados, haciendo que las conexiones sean vulnerables a ataques reales de intermediario. Úselo solo para depuración temporal o en entornos controlados y aislados.
Variables de Entorno
Las herramientas de línea de comandos, incluyendo curl (que Git a menudo usa para transferencias HTTP/HTTPS), típicamente respetan las variables de entorno HTTP_PROXY, HTTPS_PROXY y NO_PROXY. Estas variables proporcionan una configuración de proxy a nivel de sistema o de sesión que las aplicaciones pueden heredar.
# Para proxy HTTP
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080" # A menudo el mismo para tunelización de tráfico HTTPS
# Para proxy SOCKS
export ALL_PROXY="socks5://proxy.example.com:1080"
# Excluir hosts específicos del proxy
export NO_PROXY="localhost,127.0.0.1,*.internal.com"
Tenga en cuenta que las configuraciones http.proxy y https.proxy de Git tienen precedencia sobre estas variables de entorno para las propias operaciones HTTP/HTTPS de Git. Las variables de entorno son útiles cuando git config no está configurado explícitamente, o para otras herramientas que interactúan con Git.
Comparación: git config vs. Variables de Entorno
| Característica | git config http.proxy / https.proxy |
Variables de Entorno HTTP_PROXY / HTTPS_PROXY |
|---|---|---|
| Alcance | Específico de Git (global o por repositorio) | A nivel de sistema o de sesión para aplicaciones que las respetan |
| Precedencia | Mayor para operaciones de Git; anula las variables de entorno. | Menor para Git; actúa como respaldo o para otras herramientas. |
| Persistencia | Persistente entre sesiones (almacenado en .gitconfig o .git/config). |
No persistente por defecto; requiere añadir al perfil del shell (.bashrc, .zshrc) para persistencia. |
| Autenticación | Soporta username:password@ en la URL, o solicita credenciales. |
Soporta username:password@ en la URL. |
| Flexibilidad | Control granular por repositorio Git. | Impacto más amplio en todas las aplicaciones que respetan las variables. |
Configuración del Proxy Git SSH
Para repositorios Git accedidos a través de URLs ssh:// o git@, la configuración del proxy se gestiona a través de la configuración del cliente SSH, específicamente usando la directiva ProxyCommand en ~/.ssh/config. Las configuraciones estándar de proxy HTTP/HTTPS (ej., http.proxy) no afectan las conexiones SSH.
Uso de ~/.ssh/config con ProxyCommand
El ProxyCommand le dice a SSH que establezca una conexión al host de destino (%h) y puerto (%p) enrutándola primero a través de un comando externo, típicamente un cliente proxy.
Prerrequisitos
netcat(nc): Para tunelización TCP básica y proxies SOCKS.corkscrewoconnect-proxy: Para tunelizar SSH a través de proxies HTTP/HTTPS que requieren autenticación.
Tunelización de Proxy HTTP/HTTPS
Si su proxy es un proxy HTTP/HTTPS, puede usar corkscrew o connect-proxy.
-
Instale
corkscrewoconnect-proxy(si aún no está presente).- En Debian/Ubuntu:
sudo apt-get install corkscrew - En macOS (con Homebrew):
brew install corkscrew connect-proxya menudo es parte deopenssho está disponible por separado.
- En Debian/Ubuntu:
-
Edite
~/.ssh/config:
Cree o modifique~/.ssh/configcon lo siguiente:```ssh
Host github.com
ProxyCommand corkscrew proxy.example.com 8080 %h %p
# Si el proxy requiere autenticación:
# ProxyCommand corkscrew proxy.example.com 8080 %h %p /path/to/proxy_auth_fileHost gitlab.com
ProxyCommand corkscrew proxy.example.com 8080 %h %pO para todos los hosts
Host *
ProxyCommand corkscrew proxy.example.com 8080 %h %p
`` Reemplaceproxy.example.comy8080con la dirección y el puerto de su proxy. El/path/to/proxy_auth_filedebe contenerusername:passworden una sola línea. Asegúrese de que este archivo tenga permisos restrictivos (ej.,chmod 600`).
Tunelización de Proxy SOCKS
Si su proxy es un proxy SOCKS, use netcat (nc) con la opción -X:
-
Asegúrese de que
netcatesté instalado. Generalmente viene preinstalado en la mayoría de los sistemas tipo Unix. -
Edite
~/.ssh/config:```ssh
Host github.com
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %pHost gitlab.com
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %pO para todos los hosts
Host *
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %p
`` Reemplaceproxy.example.comy1080con la dirección y el puerto de su proxy SOCKS. *-X 5: Especifica la versión 5 de SOCKS. Use-X 4para la versión 4 de SOCKS. *-x`: Especifica la dirección y el puerto del proxy.
Autenticación para Proxy SOCKS
Algunas versiones de netcat (nc de OpenBSD, a menudo predeterminada en Linux) soportan la autenticación de proxy SOCKS. Por ejemplo:
Host *
ProxyCommand nc -X 5 -x user:password@proxy.example.com:1080 %h %p
Consulte la página man de su versión de netcat para la sintaxis y capacidades específicas de autenticación.
Verificación de la Configuración del Proxy
Después de configurar el proxy, verifique que las operaciones de Git se estén enrutando correctamente.
Para Operaciones Git HTTP/HTTPS
Verifique su configuración de Git:
git config --global --get http.proxy
git config --global --get https.proxy
git config --global --get http.noProxy
Realice una operación git clone o git fetch en un repositorio HTTPS:
git clone https://github.com/git/git.git
Si el proxy funciona, la conexión debería ser exitosa. Las herramientas de monitoreo de red pueden confirmar el enrutamiento del tráfico.
Para Operaciones Git SSH
Pruebe su conexión SSH de forma detallada:
ssh -vT git@github.com
Busque la salida que indique la ejecución de ProxyCommand. Por ejemplo:
debug1: Executing proxy command: exec corkscrew proxy.example.com 8080 github.com 22
Luego, intente una operación Git:
git clone git@github.com:git/git.git
Solución de Problemas Comunes
- Dirección o Puerto del Proxy Incorrectos: Vuelva a verificar la dirección IP o el nombre de host del servidor proxy y el puerto designado.
- Fallo de Autenticación: Verifique el nombre de usuario y la contraseña del proxy. Para
git config, asegúrese de que las credenciales sean correctas o que un ayudante de credenciales esté configurado. ParaProxyCommand, asegúrese de que el archivo de autenticación o las credenciales incrustadas sean correctas. - Problemas de Certificado SSL (
https://): Si encuentra errores deSSL certificate problem: self signed certificate in certificate chain, su proxy corporativo podría estar realizando inspección SSL. Configurehttp.sslCAInfocon el certificado de CA raíz de su empresa o, como último recurso, establezca temporalmentehttp.sslVerify falsepara depuración (no recomendado para producción). - Bloqueos de Firewall: Asegúrese de que su firewall local (si lo hay) y el firewall corporativo permitan conexiones salientes al servidor proxy en su puerto especificado. El propio servidor proxy también debe permitir conexiones a los servicios de alojamiento de Git.
- Ayudante de
ProxyCommandNo Encontrado (ssh://): SiProxyCommandfalla con "command not found", asegúrese de quenetcat,corkscrewoconnect-proxyestén instalados y que su ruta ejecutable esté en la variable de entornoPATHde su sistema. Especifique la ruta completa al ejecutable si es necesario (ej.,ProxyCommand /usr/bin/corkscrew ...). - Proxy Omitido: Si
git confighttp.noProxyes demasiado amplio, o si las variables de entorno están configuradas incorrectamente, Git podría intentar una conexión directa. Verifique la configuración denoProxy. - Tiempo de Espera del Proxy: Las operaciones de larga duración pueden agotar el tiempo de espera si el proxy tiene configuraciones de tiempo de espera agresivas. Esto suele ser un problema de configuración del lado del servidor.