authentication emacs proxy emacs24 elpa

authentication - Use ELPA(Emacs) detrás de un proxy que requiere autenticación



emacs24 (3)

He leído this y this pregunta. En ambos dicen que Emacs puede lidiar con la autenticación, pero no funciona para mí.

La pregunta es: ¿Qué está mal?

La versión de Emacs es 24.0.97-1 y se ejecuta en Linux de 64 bits.

En el trabajo tengo que usar el servidor proxy para cualquier conexión a Internet. Así que establezco las siguientes variables de entorno:

http_proxy="http://username:password@ip:port https_proxy="https://username:password@ip:port ftp_proxy="ftp://username:password@ip:port

Esto funciona. Puedo descargar paquetes sin ningún problema.

Cuando ejecuto Mx package-refresh-contents en Emacs, me pide el nombre de usuario y la contraseña para el servidor proxy, pero no puedo conectarme al servidor. Incluso no intenta conectarse, es decir, después de escribir la contraseña y presionar Enter Emacs informa al instante : Failed to download ''marmalade'' archive

Lo mismo sucede si http_proxy nombre de usuario y la contraseña de la variable http_proxy o si configuro url-proxy-services en Emacs (incluso si desarmo la variable del sistema).


Aquí hay dos errores: uno está en url-http.el, y se puede solucionar con un parche que acabo de enviar a http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12069 Esto evitará que Emacs pidiéndole la contraseña en cada intento, y cuando no lo haga, debería funcionar.

El otro error aún no se ha rastreado, pero parece que cuando el servidor proxy solicita la autenticación, la autenticación se solicita y, de inmediato, el código del paquete procesa la solicitud de autenticación del servidor proxy. Mientras tanto la petición real continúa en el fondo.


Emacs usa solo la parte HOST y PORT de http_proxy .

Obtengo autorización trabajando sin interacción del usuario por:

(setq url-proxy-services ''(("no_proxy" . "^//(localhost//|10.*//)") ("http" . "proxy.com:8080") ("https" . "proxy.com:8080"))) (setq url-http-proxy-basic-auth-storage (list (list "proxy.com:8080" (cons "Input your LDAP UID !" (base64-encode-string "LOGIN:PASSWORD")))))

Esto funciona para Emacs 24.3. Se basa en trucos API no públicos, por lo que es posible que no funcione, es otra versión de Emacs ...

Reemplace LOGIN y PASSWORD con su información de autenticación ...

También hay url-http-proxy-digest-auth-storage . Simplemente complete el indicador con datos de autenticación y verifique qué var usa Emacs (por M-: var RET ) ...


Parece que Emacs tiene algunos problemas con la autenticación. Así que instalé Squid y ahora lo uso como intermediario entre el servidor proxy externo y todas mis aplicaciones. Squid está configurado como un proxy sin autenticación y todo funciona bien con él.

Muchas personas recomiendan esta solución pero no dan instrucciones precisas. Hice mi /etc/squid/squid.conf desde otro diseñado para diferentes propósitos. Probablemente contiene algo que no es necesario y / o pierde algo que debería tener. Cualquier mejora es bienvenida:

# only access from localhost is allowed acl localhost src 127.0.0.1/32 acl all src all http_access allow localhost http_access deny all icp_access deny all never_direct allow all # turn off cache cache_dir null /tmp cache deny all # logs access_log /var/log/squid/access.log squid # turn off proxy-headers (no idea what is it :)) via off forwarded_for off # describe external proxy server cache_peer <proxy_ip> parent <proxy_port> 0 no-query default proxy-only login=<my_login>:<my_password> http_port 10000 acl port10000 myport 10000 cache_peer_access <proxy_ip> allow port10000

Este proxy tiene dirección 127.0.0.1:10000 . En Emacs tengo que ejecutar el siguiente código:

(setq url-proxy-services ''(("http" . "127.0.0.1:10000")))