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のサイトよりインストーラーをダウンロードします。

http://cntlm.sourceforge.net/

cntlm-0.92.3-setup.exeがダウンロードされるので、ダブルクリックで実行し、インストールします。

Cntlmの設定

C:\Program Files (x86)\Cntlmディレクトリにインストールされますので、ここにあるcntlm.iniファイルを編集して設定します。

Username <Your Username>
Domain      <Windows Domain Name. exp omoikane>
Password    <Your Password>

Proxy       <Proxy Server IP Address>:<Proxy Port Number>
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 <Your Username>
Domain      <Windows Domain Name. exp omoikane>
PassLM          nantokakanntoka
PassNT          nantokakanntoka
PassNTLMv2      nantokakanntoka 
# Password  <Your 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環境変数を設定することで改善されるかもしれない。

https://github.com/atom/apm/issues/322#issuecomment-96430856

One thought on “Cntlmを使いNTLM proxy環境下でもnpmを使いたい”

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください