Подтвердить что ты не робот

Использование npm за корпоративным прокси .pac

Мне нужно скачать несколько пакетов через npm, но наша корпоративная конфигурация прокси - это файл .pac (я нахожусь на Windows)

Я уже пробовала

npm config set proxy http://mydomain\username:[email protected]:8181/proxy.pac
npm config set https-proxy http://mydomain\username:[email protected]:8181/proxy.pac

или же

npm config set proxy http://1.2.3.4:8181/proxy.pac
npm config set https-proxy http://1.2.3.4:8181/proxy.pac

но это не работает...

любое предложение? Спасибо

4b9b3361

Ответ 1

У меня была очень похожая проблема, где я не мог заставить npm работать за нашим прокси-сервером.

Мое имя пользователя имеет форму "domain\username", включая косую черту в конфигурации прокси, в результате появляется косая черта. Итак, введя это:

npm config set proxy "http://domain\username:[email protected]:port/"

тогда выполнение этого npm config get proxy возвращает следующее: http://domain/username:[email protected]:port/

Поэтому, чтобы исправить проблему, я вместо этого URL закодировал обратную косую черту, поэтому ввел это:

npm config set proxy "http://domain%5Cusername:[email protected]:port/"

и с этим был установлен прокси-доступ.

Ответ 2

Найдите URL-адрес pac файла в настройках pac сети Internet Explorer и загрузите pac файл с настроенного URL-адреса. Файл pac - это просто файл javascript с функцией FindProxyForURL которая возвращает разные прокси-хосты в разных сценариях.

Попробуйте найти хост в этом pac файле, который, по вашему мнению, предназначен для общего веб-трафика, и подключите его к .npmrc в C:\Users\<username>\.npmrc

proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

Даже если вы можете войти в систему с помощью своего домена и имени пользователя на корпоративном компьютере, весьма вероятно, что имя домена Active Directory пользователя не требуется для прокси, только имя пользователя и пароль (которые могут отличаться от вашего имени входа Active Directory)

Не забудьте возиться с экранированием специальных символов пароля.

Ответ 3

Загрузите файл .pac. Откройте его в любом редакторе и найдите PROXY = "PROXY X.X.X.X:80;. У вас может быть много прокси, скопируйте любой из них и запустите следующие команды терминала:

npm config set proxy http://X.X.X.X:80
npm config set https-proxy http://X.X.X.X:80

Теперь вы можете установить любой пакет!

Ответ 4

Я решил эту проблему следующим образом:

1) Я запустил эту команду:

npm config set strict-ssl false

2) Затем установите npm для работы с http, а не https:

npm config set registry "http://registry.npmjs.org/"

3) Затем установите пакет

npm install <package name>

Ответ 5

Чтобы расширить @Steve Робертс ответ.

Мое имя пользователя имеет форму "домен\имя пользователя" - включая косую черту в конфигурации прокси, что привело к появлению прямой косой черты. Итак, введя это:

npm config set proxy "http://domain\username:[email protected]:port/"

Мне также пришлось URL-кодировать строку моего domain\user, однако внутри моего имени пользователя есть пробел, поэтому я добавляю + чтобы кодировать пробел URL-кодировки, но он будет дважды кодироваться как %2B (который является кодировкой URL для знак плюс, однако кодировка URL для пробела %20), поэтому мне пришлось вместо этого сделать следующее:

команда npm

//option one 
//it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:[email protected]:port"
npm config set proxy "http://DOMAIN%5Cuser+name:[email protected]:port"

//option two
//it works best for me
//please notice that I actually used a space 
//instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:[email protected]:port"
npm config set proxy "http://DOMAIN%5Cuser name:[email protected]:port"

устранение неполадок в конфигурации npm

Я использовал npm config list чтобы получить проанализированные значения, которые я установил выше, и вот как я узнал о двойном кодировании. Weird.

С уважением.

ПЕРЕМЕННЫЕ ОКРУЖАЮЩЕЙ СРЕДЫ ОКНА (CMD Prompt)

Обновить

Оказывается, что даже с вышеупомянутыми конфигурациями у меня все еще были некоторые проблемы с некоторыми пакетами/сценариями, которые используют Request - Упрощенный HTTP-клиент для загрузки. Итак, как объяснил выше readme, мы можем указать переменные окружения для установки прокси в командной строке, и Request будет учитывать эти значения.

Затем, после (и я неохотно признаю это) нескольких попыток (больше как дней) попытки установить переменные окружения, я, наконец, добился следующих рекомендаций:

rem notice that the value after the = has no quotations
rem    - I believe that if quotations are placed after it, they become
rem    part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem     - if you leave a space before it, you will be declaring a variable 
rem     name that includes such space, you do not want to do that
rem     - if you leave a space after it, you will be including the space
rem     as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:[email protected]:port
SET HTTPS_PROXY=http://DOMAIN\user name:[email protected]:port

cntlm

Я использовал вышеописанную технику в течение нескольких недель, пока не осознал необходимость обновления моего пароля во всех инструментах, для которых требовалась настройка прокси.

Помимо npm я также использую:

  • беседка
  • бродяга
    • виртуальная коробка (под управлением Linux)
    • apt-get [linux]
  • мерзавец
  • vscode
  • скобки
  • атом
  • ТСД

шаги установки cntlm

Итак, я установил cntlm. Настройка cntlm довольно проста, вы ищете ini файл @C:\Program Files\Cntlm\cntlm.ini

  1. Откройте C:\Program Files\Cntlm\cntlm.ini (вам могут потребоваться права администратора)
  2. ищите строки имени Username и Domain (я думаю, что строка 8-9)
    • добавьте ваше имя пользователя
    • добавить свой домен
  3. В командной строке cmd выполните:

    cd C:\Program Files\Cntlm\
    cntlm -M
    cntlm -H  
    
    • Вам будет предложено ввести пароль:
     cygwin warning:
       MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
       Preferred POSIX equivalent is: /Cntlm/cntlm.ini
       CYGWIN environment variable option "nodosfilewarning" turns off this warning.
       Consult the user guide for more details about POSIX paths:
         http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
     Password:
    
  4. Вывод, который вы получите от cntlm -H будет выглядеть примерно так:

    PassLM          561DF6AF15D5A5ADG  
    PassNT          A1D651A5F15DFA5AD  
    PassNTLMv2      A1D65F1A65D1ASD51  # Only for user 'user name', domain 'DOMAIN'
    
    • Рекомендуется использовать PassNTLMv2, поэтому добавьте # перед строкой PassLM и PassNT или не используйте их
  5. Вставьте вывод из cntlm -H в INI файл, заменив строки для PassLM, PassNT и PassNTMLv2, или закомментируйте оригинальные строки и добавьте свои.
  6. Добавьте свои Proxy серверы. Если вы не знаете, что такое прокси-сервер... Сделайте то, что я сделал, я искал свой файл автоконфигурации прокси, ища AutoConfigURL реестра AutoConfigURL в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings. Перейдите по этому URL и просмотрите код, который оказался JavaScript.
  7. При желании вы можете изменить порт, который прослушивает cntlm, изменив строку Listen ####, где #### - номер порта.

Настройте NPM с помощью cntlm

Итак, вы указываете npm на ваш прокси cntml, вы можете использовать ip, я использовал localhost и порт по умолчанию для cntlm 3128 так что мой URL прокси выглядит так

http://localhost:3128

С правильной командой:

Конфигурация npm установленный прокси http://localhost: 3128

Это намного проще. Вы устанавливаете все свои инструменты с тем же URL-адресом и обновляете пароль только в одном месте. Жизнь намного проще, нет.

Необходимо настроить сертификат CA npm

Из НОЙ документации ок

Если ваш корпоративный прокси-сервер перехватывает соединения https со своим собственным самоподписанным сертификатом, это необходимо избегать npm config set strict-ssl false (большой нет-нет).

Основные шаги

  1. Получить сертификат из вашего браузера (Chromes работает хорошо). Экспортируйте его в кодировке Base-64 X.509 (.CER)
  2. Заменить новые строки на \n
  3. Отредактируйте ваш .npmrc добавьте строку ca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

вопросы

Я заметил, что иногда зависает npm, поэтому я останавливаю (иногда принудительно) cntlm и перезапускаю его.

Ответ 6

У меня возникло несколько проблем с этим, и, наконец, я сделал следующее:

  • Используемый Fiddler с выбранным "Автоматически аутентифицированным"
  • В пользовательских правилах fiddler я добавил

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
    
  • Наконец, в npm я установил прокси для http://localhost:8888

Это отлично работает.

Ответ 7

Вы можете проверить Fiddler, если NPM дает ошибку аутентификации. Его легко установить и настроить. Установите правило Fiddler для автоматического аутентификации. В .npmrc установите эти свойства

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

Это сработало для меня:)

Ответ 8

Для тех, кто борется за корпоративный брандмауэр, а также проблемы с SSL (неспособным получить сертификат локального эмитента), выполните следующие действия:

Забыть о SSL

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

npm config set proxy http://username:[email protected]:port
npm config set https-proxy http://username:passw[email protected]:port
npm config set registry http://registry.npmjs.org/

Быстрое "получение" здесь, мои учетные данные прокси-сервера одинаковы для защищенных и незащищенных запросов (обратите внимание, как я оставил свой протокол как http:// для https-proxy). Это может быть для вас одинаково, и это может быть не так.

Я хочу сохранить SSL

Если вы хотите сохранить SSL и не хотите использовать strict-ssl=false, у вас больше работы. Для меня я за корпоративным брандмауэром, и мы используем самозаверяющие сертификаты, поэтому я получаю сообщение об ошибке unable to get local issuer certificate. Если вы находитесь на той же лодке, что и я, вам нужно установить опцию cafile= в файле конфигурации npm. Во-первых, вам нужно создать файл PEM, в котором содержится информация о ваших самозаверяющих сертификатах. Если вы не знаете, как это сделать, вот инструкции для среды Windows без использования стороннего программного обеспечения:

Нам нужно явно указать, какие сертификаты следует доверять, потому что мы используем сертификаты самоподписывания. Например, я перешел на www.google.com с помощью Chrome, чтобы получить сертификаты.

В Chrome перейдите в Inspect → Security → View Certificate. Вы увидите все сертификаты, которые позволяют использовать SSL-соединение. Обратите внимание, как эти сертификаты подписываются самостоятельно. Размытая часть - это моя компания, и мы не являемся сертифицированным органом. Вы можете экспортировать полный путь сертификата в виде файла P7B или экспортировать сертификаты отдельно как файлы CER (кодировка base64). Экспорт полного пути в P7B не принесет вам много пользы, потому что вам придется в любом случае открыть этот файл в диспетчере сертификатов и экспортировать его как отдельные CER файлы. В Windows дважды щелкните файл P7B, чтобы открыть приложение Certificate Manager.

введите описание изображения здесь

Экспорт как CER (Base 64) - это действительно текстовый файл в следующем формате:

-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF
ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n
b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate...
-----END CERTIFICATE-----

Чтобы создать наш файл PEM, нам просто нужно собрать эти сертификаты друг на друга в один файл и изменить расширение на .pem. Я использовал блокнот для этого.

Вы складываете сертификаты в обратном порядке из пути к сертификату. Таким образом, выше, я начинал с *.google.com, затем вставлял Websense под ним, затем выдавал CA 1 и т.д. Таким образом, сертификаты анализируются сверху вниз, ища соответствующий Root CA. Просто включение Root CA не будет работать, но нам также не нужно включать все сертификаты. Из приведенного выше пути мне нужно включить только те сертификаты, которые поступают перед сертификатом Websense (выдача CA 1, CA CA, Root CA).

Как только эти самоподписанные сертификаты будут сохранены в файл PEM, мы готовы проинструктировать npm использовать эти сертификаты в качестве нашего доверенного ЦС. Просто установите конфигурационный файл, и вам должно быть хорошо:

npm config set cafile "C:\yourcerts.pem"

Теперь, когда ваши прокси установлены (http и https), а реестр настроен на https://registry.npmjs.org, вы должны иметь возможность устанавливать пакеты за корпоративным брандмауэром с самозаверяющими сертификатами, не указывая настройку strict-ssl.

Ответ 9

Попробуйте это, установите прокси-сервер в npm следующим образом

npm config set proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set https-proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

Ответ 10

Вы получите прокси-хост и порт от администратора вашего сервера или поддержки.

После этого настройте

npm config set http_proxy http://username:[email protected]:itsport
npm config set proxy http://username:[email protected]:itsport

Если какой-либо специальный символ в пароле попробует с% urlencode. Например: - фунт (хеш) shuold заменить на% 23.

Это сработало для меня...

Ответ 11

Если вы находитесь за корпоративной сетью с прокси-сервером, я просто использовал прокси-инструмент ntlm и использовал порт и прокси, предоставленные ntlm, для того, чтобы использовать эту конфигурацию:

strict-ssl=false
proxy=http://localhost:3125

Надеюсь, это поможет.

Ответ 12

Используйте команду ниже в cmd или GIT Bash или в другом приглашении

$ npm config set proxy "http://192.168.1.101:4128"

$ npm config set https-proxy "http://192.168.1.101:4128"

где 192.168.1.101 - прокси ip, а 4128 - порт. измените настройки в соответствии с настройками прокси-сервера.

Ответ 13

Вы должны использовать "npm config set http-proxy"

использование:

npm config set http-proxy http://1.2.3.4:8181
npm config set https-proxy http://1.2.3.4:8181

Ответ 14

Попробуйте это, это было единственное, что сработало для меня:

npm --proxy http://: @proxyhost: --https-proxy http://: @proxyhost: --strict-ssl false install -g package

Обратите внимание на параметр --strict-ssl false

Удачи.

Ответ 15

Настройка прокси-сервера NPM, упомянутая в принятом ответе, решает проблему, но, как вы можете видеть в этой проблеме npm, некоторые зависимости используют GIT, что делает необходимым настройку прокси-сервера git, и может быть выполнено следующим образом:

git config --global http.proxy http://username:[email protected]:port
git config --global https.proxy http://username:[email protected]:port

Упомянутая настройка прокси-сервера NPM:

npm config set proxy "http://username:[email protected]:port"
npm config set https-proxy "http://username:[email protected]:port"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

Ответ 16

У меня была аналогичная проблема, и я пробовал все обходные пути, но ни один из них не работал у меня (я использовал специальные символы (например, символ "@" ) в моем пароле, и мне также нужно было добавить доменное имя).

Кроме того, я немного боялся добавить свой пароль в виде обычного текста. Выяснилось, что самым простым решением для преодоления всех этих проблем было использование своего рода обратного прокси (например, Fiddler).

Я уже подробно рассказал о шагах конфигурации в этом в SO.

Ответ 17

При работе мы используем ZScaler как наш прокси. Единственный способ, которым я смог заставить работать на нпм, - использовать Cntlm.

Смотрите этот ответ:

NPM за прокси-сервером NTLM

Ответ 18

Добавление строк ниже в файл .typingsrc помогло мне.

{
    "rejectUnauthorized": false,
    "registryURL" :"http://api.typings.org/"
 }

Ответ 19

Я столкнулся с подобной проблемой и выяснил, что в моем конфигурационном файле npm (.npmrc) неправильная запись в реестре. прокомментировал это и снова запустил npm install. он работал.

Ответ 20

ОС: Windows 7

Шаги, которые работали на меня:

  • npm config get proxy
  • npm config get https-proxy

  • Комментарии: Я выполнил эту команду, чтобы узнать настройки моего прокси-сервера
    npm config rm proxy

  • npm config rm https-proxy
  • npm config set registry=http://registry.npmjs.org/
  • npm install

Ответ 21

Поскольку у меня все еще есть проблемы с настройкой параметров прокси на работе и отключением их дома, я написал сценарий и опубликовал npm-corpo-proxy.sh. В каждой корпорации пароль должен часто меняться и должен содержать специальные символы, которые должны быть закодированы перед передачей конфигурации npm (то же самое для обратной формы домена\пользователя).

Ответ 22

Из небольшого поиска в Google первое, что я попробовал, было это

npm config set registry http://registry.npmjs.org/
npm config set proxy "your proxy"
npm config set https-proxy "your proxy"

Но все же npm, похоже, терял связь при попытке выполнить npm install. Затем я запустил эту строку в командной строке, и теперь я могу использовать npm install

set NODE_TLS_REJECT_UNAUTHORIZED=0

Ответ 23

Я не мог заставить его работать с CNTLM. Я попытался проследить всю информацию, размещенную выше, но прокси все еще не авторизовал соединение. С Fiddler вам просто нужно установить его и выбрать опцию "Автоматически аутентифицироваться". Но для работы мне пришлось удалить файл .npmrc из моей пользовательской папки и установить переменные среды, как указано здесь, со следующими значениями:

set npm_config_https-proxy="http://127.0.0.1:8888"

set npm_config_registry="http://registry.npmjs.org/"