Ruby
Python
Windows
Network
Anaconda

NTLM認証Proxy環境下でconda/pip/gemを動かす

More than 1 year has passed since last update.

概要

  • conda/pip/gemのネットにあるProxy設定の情報方法を試してもダメな場合、NTLM認証だからかもしれません。
  • cntlmをローカルに入れて、そこを通すことでconda/pip/gemが使えるようになります。

環境

  • Windows 7 - 64bit
  • gem 2.5.1
  • pip 9.0.1
  • conda 4.3.24

手順

まず、Cntlmを使いNTLM proxy環境下でもnpmを使いたい_OPC Diaryを読んで、cntlmを設定します。「npmの設定」の部分は飛ばしてOKです。

Cntlmとは

Cntlmはオープンソースで提供されているNTLM認証Proxy環境下で、各種ツールに変わりNTLM認証の代行を行うProxyサーバーです。今回はWindowsで動かしますが、Linux、Mac版もあります。(事実上NTLM認証Proxy環境下でLinuxやMacのHomebrew使うなら必須じゃないかな。。。)

まとめ

という事で、npmに限らずproxy設定できるツールならCntlmを使えば有利な戦いがで切るんじゃないかな!

conda

Proxy下のWindowsでPython(Anaconda)環境を整える - Qiitaを読み、.condarcのプロキシ設定を以下のようにする。

proxy_servers:
    http: http://[プロキシアドレス]:[ポート番号]
    https: https://[プロキシアドレス]:[ポート番号]

cntlm.iniのデフォルトを使うならば、ポート番号は3128なので以下です。

proxy_servers:
    http: http://localhost:3128
    https: https://localhost:3128

pip

pythonメモ proxy下でのpip、easy_install - Qiitaを参考に、コマンドpip installする前に以下を実行します。

set HTTP_PROXY=http://localhost:3128
set HTTPS_PROXY=https://localhost:3128

プロセス固有の環境変数(PATH)を設定したコマンドプロンプトを立ち上げる-Qiitaの応用例1を使って、

vbs抜粋
set env = shell.Environment("Process")
env.Item("HTTP_PROXY") =  "http://localhost:3128"
env.Item("HTTPS_PROXY") =  "https://localhost:3128"

のように設定してコマンドプロンプトを立ち上げておくといいかもしれません。

gem

gem installは、-pでプロキシを指定できるので、以下のようにします。

> gem install serialport -r -p https://localhost:3128

gem install時にcertificate verify failed が発生したら - Qiitaで証明書を入れ替える必要があるかもしれません。

> gem install serialport -r -p http://localhost:3128
RROR:  Could not find a valid gem 'serialport' (>= 0), here is why:
         Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)

「certificate verify failed 」が発生したら、

C:\Ruby23-x64\lib\ruby\2.3.0\rubygems\ssl_certs\AddTrustExternalCARoot-2048.pem

のバックアップを取ったあと、テキストエディタで開いて、

View in Base64で見れる証明書

の内容をコピーして保存すればいけると思います。

httpでなんとかするという方法もあるようですが、「セキュリティ上httpsを推奨するとメッセージが出る」ようなので、こちらの方が若干クリーンかなと。

参考

Cntlmを使いNTLM proxy環境下でもnpmを使いたい_OPC Diary
[Windows]Forefront TMGのNTLM認証プロキシをCntlmでなんとかする_エンジニ屋
gem install時にcertificate verify failed が発生したら - Qiita
プロセス固有の環境変数(PATH)を設定したコマンドプロンプトを立ち上げる-Qiita