Подтвердить что ты не робот

Использовать ELPA (Emacs) за прокси-сервером, требующим аутентификации

Я прочитал этот и этот вопрос. В обоих они говорят, что Emacs может иметь дело с аутентификацией, но это не работает для меня.

Вопрос: что не так?

Версия Emacs - 24.0.97-1, и она работает в 64-разрядной версии Linux.

На работе я должен использовать прокси-сервер для любого интернет-соединения. Поэтому я устанавливаю следующие переменные среды:

http_proxy="http://username:[email protected]:port
https_proxy="https://username:[email protected]:port
ftp_proxy="ftp://username:[email protected]:port

Это работает. Я могу без проблем загружать пакеты.

Когда я запускаю M-x package-refresh-contents в Emacs, он запрашивает у меня логин и пароль для прокси-сервера, но он не может подключиться к серверу. Он даже не пытается подключиться, т.е. После ввода пароля и нажатия Enter Emacs мгновенно отчетов: Failed to download 'marmalade' archive

То же самое происходит, если я удалю имя пользователя и пароль из переменной http_proxy или если я установил url-proxy-services в Emacs (даже если я отключу системную переменную).

4b9b3361

Ответ 1

Emacs использует только HOST и PORT часть из http_proxy.

Я получаю авторизацию без взаимодействия с пользователем:

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

Это работает для Emacs 24.3. Он основан на непубличных API-трюках, поэтому может не работать другая версия Emacs...

Замените LOGIN и PASSWORD на вашу информацию об авторе...

Также есть url-http-proxy-digest-auth-storage. Просто введите приглашение с данными аутентификации и проверьте, какой var используется Emacs (M-: var RET)...

Ответ 2

Похоже, что у Emacs есть некоторые проблемы с аутентификацией. Поэтому я установил Squid и теперь использую его как промежуточное звено между внешним прокси-сервером и всеми моими приложениями. Squid настроен как прокси-сервер без аутентификации, и все работает с ним хорошо.

Многие рекомендуют это решение, но не дают точных инструкций. Я сделал свой /etc/squid/squid.conf из другого, предназначенного для разных целей. Вероятно, в нем есть что-то, что не нужно и/или пропускает то, что должно быть. Любые улучшения приветствуются:

# 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

Этот прокси имеет адрес 127.0.0.1:10000. В Emacs я должен выполнить следующий код:

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

Ответ 3

Здесь есть две ошибки: одна находится в url-http.el и может быть исправлена ​​с исправлением, которое я только что отправил на http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12069 Это заставит Emacs запрашивать пароль для каждой попытки, и когда он не запрашивает вас, он должен работать.

Другая ошибка еще не была отслежена, но кажется, что когда прокси-сервер запрашивает аутентификацию, запрашивается аутентификация, а затем запрос аутентификации с прокси-сервера обрабатывается кодом пакета. Между тем реальный запрос продолжается в фоновом режиме.