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")))