npm windows за корпоративным прокси

Выхожу в интернет через корпоративный прокси который требует NTLM аутентификацию.

После нескольких неудачных попыток заставить npm ходить через proxy с помощью команд:

npm config set proxy http://username:password@proxy.company.com:8080
npm config set https-proxy http://username:password@proxy.company.com:8080

решено было использовать замечательную программу Cntlm. 

Настройка cntlm.

Саму программу можно скачать с sourceforge.net.

Настройка программы осуществляется с помощью файла cntlm.ini, опции которой неплохо задукоментированы. Давайте разберём основные.


Username и Domain - просто задаётся юзернэйм и домен.

Proxy - указываем корпоративный прокси в формате <url>:<port>

Listen - 3128 порт на котором будет слушать cntlm 

Password - тут есть два пути просто написать в кавычках пароль к прокси (что крайне не желательно), либо задать его с помощью hash. Рекомендую выбрать второй вариант.

Сначала сгенерируем хеши с помощью команды:

cntlm.exe -H -u <username> -d <domain>

и после ввода пароля получим что то типа.

PassLM         F8325878C92B9C1F552C4BCA4AEBFB11
PassNT         8AC5421C85AE4543114DB5B918C5BDD5
PassNTLMv2     6534463D172C30433AB459074808495A    # Only for user 'user', domain 'domain'

Перенесём то что выдала нам эта команда в файл cntlm.ini.

И заполним опцию Auth. Выберем её с помощью таблицы в зависимости от диалекта NTLM.

Settings     | Requires
-------------+-----------------
Auth NTLMv2  | PassNTLMv2
Auth NTLM2SR | PassNT
Auth NT      | PassNT
Auth NTLM    | PassNT + PassLM
Auth LM      | PassLM

Если мы не знаем какой тип протокола используется, то можно его узнать с помощью команды:

cntlm.exe -I -M http://google.com -u user -d domain

получим что то похожее на:

Config profile  1/4... OK (HTTP code: 302)
----------------------------[ Profile  0 ]------
Auth            NTLMv2
PassNTLMv2      937C398CD717126ЕDEA1AC380E134892
------------------------------------------------

npm

Настройку npm  можно осуществить просто создав файл .npmrc в корне проекта со следующим содержимым:

registry=http://registry.npmjs.org
proxy=http://127.0.0.1:3128
https-proxy=http://127.0.0.1:3128
http-proxy=http://127.0.0.1:3128
strict-ssl=false

опция strict-ssl=false для меня оказалась критичной, так как без неё при попытке установить модуль, npm подвисала, и лишь после рестарта службы cntlm установка модулей возобновлялась не надолго.

На этом всё, удачи.