web-dev-qa-db-ja.com

認証が必要なプロキシの背後でELPA(Emacs)を使用する

thisthis の質問を読みました。どちらの場合も、Emacsは認証を処理できると言われていますが、私には機能しません。

問題は、何が問題なのかということです。

Emacsのバージョンは24.0.97-1で、64ビットLinuxで実行されています。

職場では、インターネット接続にプロキシサーバーを使用する必要があります。そこで、次の環境変数を設定しました。

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

これは機能します。パッケージは問題なくダウンロードできます。

EmacsでM-x package-refresh-contentsを実行すると、プロキシサーバーのログインとパスワードの入力を求められますが、サーバーに接続できません。接続しようとさえしません。つまり、パスワードを入力してEnter Emacsを即座にと押した後、次のように報告されます:Failed to download 'marmalade' archive

http_proxy変数からユーザー名とパスワードを削除した場合、またはEmacsでurl-proxy-servicesを設定した場合(システム変数の設定を解除した場合でも)、同じことが起こります。

20
Maksim Zholudev

Emacsはhttp_proxyHostPORTの部分のみを使用します。

次の方法で、ユーザーの操作なしで認証が機能します。

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

これはEmacs24.3で機能します。これは非公開のAPIトリックに基づいているため、別のEmacsバージョンでは機能しない可能性があります...

LOGINPASSWORDを認証情報に置き換えます...

url-http-proxy-digest-auth-storageもあります。プロンプトに認証データを入力し、Emacsで使用されている変数を確認するだけです(M-:varRET)。

18
gavenkoa

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")))
6
Maksim Zholudev

ここには2つのバグがあります-1つはurl-http.elにあり、先ほど送信したパッチで修正できます http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12069 これにより、Emacsが試行のたびにパスワードの入力を求めるプロンプトが表示されなくなり、プロンプトが表示されない場合は機能するはずです。

もう1つのバグはまだ追跡されていませんが、プロキシサーバーが認証を要求すると、認証が求められ、すぐにプロキシサーバーからの認証要求がパッケージコードによって処理されるようです。その間、実際のリクエストはバックグラウンドで続行されます。

4
JSON