Is it possible to run npm install behind an HTTP proxy, which uses NTLM authentication? If yes, how can I set the server’s address and port, the username, and the password?
NTLM認証Proxyと日夜闘う戦友諸君こんにちは。
今回は最後の手段と言うことで、Cntlmを使って認証Proxy環境下でもnpm等使っていけるようにしたい。
Cntlmとは
Cntlmはオープンソースで提供されているNTLM認証Proxy環境下で、各種ツールに変わりNTLM認証の代行を行うProxyサーバーです。今回はWindowsで動かしますが、Linux、Mac版もあります。(事実上NTLM認証Proxy環境下でLinuxやMacのHomebrew使うなら必須じゃないかな。。。)
WindowsではWindows Serviceとして実行することが出来ます。
ダウンロード・インストール
まず、ハードルが高いかもしれませんが、インストール、実行にはローカルマシンのAdministrator権限が必要です。
以下のCntlmのサイトよりインストーラーをダウンロードします。
cntlm-0.92.3-setup.exeがダウンロードされるので、ダブルクリックで実行し、インストールします。
Cntlmの設定
C:\Program Files (x86)\Cntlmディレクトリにインストールされますので、ここにあるcntlm.iniファイルを編集して設定します。
Username
Domain
Password
Proxy :
Listen 3128
INIファイル中編集項目がいろいろありますが、よくあるNTLM認証Proxyであれば編集する内容は上だけです。Proxyには実際のProxyサーバーのIPアドレスを設定するので注意してください。ホスト名では動作しませんでした。また、これで仮に上手く行かなかった場合には、NTLMのハッシュを取り出しiniに書き出します。
C:\Program Files (x86)\Cntlm>cntlm -H
Password:
PassLM nantokakanntoka
PassNT nantokakanntoka
PassNTLMv2 nantokakanntoka # Only for user 'username', domain 'domain'
nanntokakanntokaの部分がハッシュになりますので、これを先ほどのINIファイルのDomainの下にコピペします。
Username
Domain
PassLM nantokakanntoka
PassNT nantokakanntoka
PassNTLMv2 nantokakanntoka
# Password
Cntlm自体はSocksにも対応しているようなので、一緒にインストールされるPDFのドキュメント等を確認してください。
Cntlmの仮実行
まず、コンソールでcntlm -fでサービスではなくフォアグランドで実行します。ただ、Ctrl+Cで中断できないので、終了時コンソールごと終了する必要があります。
npmの設定
npmでProxyの設定をします。
> npm config set proxy http://localhost:3128
> npm config set https-proxy http://localhost:3128
> npm config set registry http://registry.npmjs.org
ここまで設定して、npm view yoとしてみて、エラー無く正しい表示になればOKです。
Cntlmのサービス実行
コントロールパネル→管理ツール→サービスを開いて、Cntlm Authentication Proxyを選択し起動します。起動設定が自動になっているので状況や環境に応じて手動としたり、また、アカウントがローカルシステムアカウントなので、まずそうなら適切なユーザーアカウントに変更してください。
まとめ
という事で、npmに限らずproxy設定できるツールならCntlmを使えば有利な戦いがで切るんじゃないかな!
追記 AtomのAPMでの場合
apm installでgypのエラーが出た場合には、以下を参考に ATOM_NODE_URL環境変数を設定することで改善されるかもしれない。
コメント
[…] Cntlmを使いNTLM proxy環境下でもnpmを使いたい […]