スポンサーリンク

Cntlmを使いNTLM proxy環境下でもnpmを使いたい

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?

情報源: NPM behind NTLM proxy

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: Fast NTLM Authentication Proxy in C
Cntlm - Fast NTLM authentication proxy accelerator with tunneling, written in pure C

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環境変数を設定することで改善されるかもしれない。

Unable to install packages behind corporate proxy · Issue #322 · atom/apm
I get the following error when trying to install a package with apm behind a corporate proxy. $ apm install linter Insta...

コメント

  1. […] Cntlmを使いNTLM proxy環境下でもnpmを使いたい […]

タイトルとURLをコピーしました