source

회사 프록시 .pac 뒤에서 npm 사용

factcode 2023. 8. 22. 22:32
반응형

회사 프록시 .pac 뒤에서 npm 사용

npm을 통해 여러 패키지를 다운로드해야 하지만 회사 프록시 구성이 .pac 파일입니다(창에 표시됨).

이미 시도했습니다.

npm config set proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac
npm config set https-proxy http://mydomain\username:password@1.2.3.4: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

하지만 효과가...

무슨 제안이 있습니까?감사해요.

방금 비슷한 문제가 발생했는데, 프록시 서버 뒤에서 NPM을 작업할 수 없었습니다.

제 사용자 이름은 "domain\username" 형식입니다. 프록시 구성에 슬래시가 포함되어 슬래시가 표시되었습니다.입력 내용:

npm config set proxy "http://domain\username:password@servername:port/"

그러면 이것을 실행합니다.npm config get proxy다음을 반환합니다. http://domain/domain:password@servername:port/

따라서 문제를 해결하기 위해 URL로 백슬래시를 인코딩하여 다음과 같이 입력했습니다.

npm config set proxy "http://domain%5Cusername:password@servername:port/"

그리고 이것으로 프록시 액세스가 고정되었습니다.

"URL"의 .pac파일을 Internet Explorer lan 설정에 저장하고 구성된 URL에서 pac 파일을 다운로드합니다.의 함수를 가진 javascript 입니다.FindProxyForURL서로 다른 시나리오에서 서로 다른 프록시 호스트를 반환합니다.

pac 파일에서 웹 의 .연결해 .C:\Users\<username>\.npmrc

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

회사 컴퓨터에서 도메인과 사용자 이름으로 로그인할 수 있지만 프록시에는 사용자 Active Directory 도메인 이름이 필요하지 않고 사용자 이름과 암호만 필요할 수 있습니다(Active Directory 로그인과 다를 수 있음).

특수 비밀번호 문자를 빼내는 것을 잊지 마세요.

:.pacfile. 일파를 . 아무 편집기에서나 열고 검색합니다.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

이제 모든 패키지를 설치할 수 있습니다!

저는 이 문제를 다음과 같이 해결했습니다.

다음 명령을 실행합니다.

npm config set strict-ssl false

그런 다음 https 대신 http로 실행하도록 npm을 설정합니다.

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

그런 다음 패키지를 설치합니다.

npm install <package name>

@Steve Roberts 답변에 대해 자세히 설명합니다.

제 사용자 이름은 "domain\username" 형식입니다. 프록시 구성에 슬래시가 포함되어 슬래시가 표시되었습니다.입력 내용:

npm config set proxy "http://domain\username:password@servername:port/"

제 나또한 URL 야습했다니해를 URL 해야 했습니다.domain\user문자열, 하지만, 나는 내 사용자 이름 안에 공백이 있어서, 나는 그것을 넣었습니다.+인코딩을 이지만, " 인을인지만다하음같인다공코니"로 됩니다.%2B의 URL 은 (으)ㄹ 수 있습니다.%20과 같은 을 해야 했습니다:), 그서대신다수행했야습다니해을음래.

npm 명령어

// option one 
// it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x: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:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"

// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"

npm 구성 문제 해결

사용했습니다.npm config list위에서 설정한 구문 분석 값을 얻기 위해, 그리고 그것이 제가 이중 인코딩에 대해 알게 된 방법입니다.이상하다.

기본적으로 다음 요구 사항을 파악해야 합니다.

  1. 는 사입니다.DOMAIN입니다.
  2. 특수 문자를 인코딩해야 합니까?
    • 공간 및 at (@) 기호는 특히 어렵습니다.

안부 전해요.

WINDOWS 환경변수(CMD 프롬프트)

갱신하다

위의 구성에도 불구하고 요청 - 단순화된 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:password@x.x.x.x:port
SET HTTPS_PROXY=http://DOMAIN\user name:password@x.x.x.x:port

cntlm

프록시 설정이 필요한 모든 도구에서 암호를 업데이트해야 하는 오버헤드를 인식할 때까지 몇 주 동안 위의 기술을 사용했습니다.

npm 외에도 다음을 사용합니다.

  • 웅덩이
  • 부랑자의
    • 가상 상자(리눅스 실행)
    • apt-get [linux]
  • 기트
  • vscode
  • 대괄호
  • 원자의
  • tsd

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's 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'
    
    • 를 사용하는 것이 .합니다.#을줄서않고행 PassLM그리고.PassNT또는 사용하지 않습니다.
  5. 의 .cntlm -H에서 ini 일서행대체다의 합니다.PassLM,PassNT그리고.PassNTMLv2또는 원래 행에 주석을 달거나 사용자의 행을 추가합니다.
  6. 추가할 항목Proxy 서버가...프록시 서버가 무엇인지 모르는 경우...가 한, 저는 을 찾아서 자동 구성 파일을 .AutoConfigURL레스트리입에 있는 키HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings해당 URL로 이동하여 JavaScript인 코드를 확인합니다.
  7. 으로 "cntlm"을 대기하는 할 수 .Listen ####서 줄, 치####포트 번호입니다.

cntlm으로 NPM 설정

할 수 , ip를 했습니다. ip는 cntml, ip는 cntml, npm, ip를 사용했습니다.localhost 기본 는 cntlm 입니다.3128 URL은 .

http://localhost:3128

적절한 명령을 사용하여:

npm config set proxy http://localhost:3128

훨씬 더 간단합니다.모든 도구를 동일한 URL로 설정하고 암호를 한 곳에서만 업데이트합니다.인생은 훨씬 더 단순합니다.

npm CA 인증서를 설정해야 합니다.

npm 설명서 ca에서

회사 프록시가 자체 서명된 인증서로 https 연결을 가로채는 경우 이는 피해야 합니다(큰 no-no).

기본 단계

  1. 브라우저에서 인증서를 가져옵니다(Chromes가 잘 작동함).Base-64로 인코딩된 X.509(.)로 내보냅니다.CER)
  2. 을 새줄바로 바꿉니다.\n
  3. 를 합니다..npmrcca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

문제들

때때로 npm이 중단되는 것을 발견했기 때문에 (때로는 강제로) cntlm을 중지하고 다시 시작합니다.

이와 관련하여 여러 문제에 부딪혔고 마지막으로 수행한 작업은 다음과 같습니다.

  1. 자동 인증을 선택한 상태에서 사용된 Fiddler
  2. fiddler 사용자 지정 규칙에서, 나는 추가했습니다.

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
    
  3. 마지막으로 npm에서 프록시를 http://localhost:8888로 설정합니다.

이것은 잘 작동했습니다.

NPM에서 Authentication 오류가 발생한 경우 Fiddler를 확인할 수 있습니다.설치 및 구성이 쉽습니다.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

저한테는 효과가 있었어요 :)

기업 방화벽과 SSL(로컬 발급자 인증서를 가져올 수 없음) 문제로 어려움을 겪고 있는 모든 사용자를 위해 다음과 같은 몇 가지 단계를 시도할 수 있습니다.

SSL 잊기

SSL이 걱정되지 않는 경우 프록시를 설정하고 레지스트리를 비보안 버전으로 변경하여 많은 이전 기여자의 조언을 따를 수 있습니다.

npm config set proxy http://username:password@proxyname:port
npm config set https-proxy http://username:password@proxyname:port
npm config set registry http://registry.npmjs.org/

여기서 빠른 "gotcha"를 사용하면 보안 요청과 보안되지 않은 요청에 대한 프록시 자격 증명이 동일합니다(https-proxy 구성에 대해 프로토콜을 http://로 유지한 방법에 주목하십시오).이것은 당신에게도 똑같을 수도 있고 아닐 수도 있습니다.

SSL을 유지합니다.

" 유고사지하않으용려면"strict-ssl=false그러면 당신은 할 일이 더 많아집니다.인증서를 ▁for▁다▁receive나발니▁and합생는ates,▁i,-▁firewall▁so▁self오▁i▁certific▁we▁me▁are가류▁a▁behind▁am라는 오류가 발생합니다.unable to get local issuer certificate이 저와 , 은 만당신나같처은있다지면에할, 와▁the다▁as것▁if▁set▁to▁need니입▁then할▁will▁you▁the,설을 설정해야 할 것입니다.cafile=config file.npm 파일에 .먼저 자체 서명된 인증서에 대한 정보가 들어 있는 PEM 파일을 만들어야 합니다.타사 소프트웨어를 사용하지 않는 Windows 환경에 대한 지침은 다음과 같습니다.

자체 서명 인증서를 사용하고 있기 때문에 어떤 인증서를 신뢰해야 하는지 명시적으로 표시해야 합니다.예를 들어, 저는 인증서를 가져올 수 있도록 Chrome을 사용하여 www.google.com 으로 이동했습니다.

Chrome에서 Inspect -> Security -> View Certificate로 이동합니다.SSL 연결을 허용하는 모든 인증서가 표시됩니다.이러한 인증서가 자체 서명되는 방식에 주목합니다.흐릿해진 부분은 제 회사이며, 저희는 인증 기관이 아닙니다.전체 인증서 경로를 P7B 파일로 내보내거나 인증서를 CER 파일(base64 인코딩)로 개별적으로 내보낼 수 있습니다.전체 경로를 P7B로 내보내면 인증서 관리자에서 이 파일을 열고 개별 CER 파일로 내보내야 하므로 큰 도움이 되지 않습니다.Windows에서 P7B 파일을 두 번 클릭하면 인증서 관리자 응용 프로그램이 열립니다.

enter image description here

CER(Base 64)로 내보내기는 실제로 다음 형식의 텍스트 파일입니다.

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

PEM 파일을 만들려면 이러한 인증서를 서로 겹쳐 하나의 파일로 만들고 확장자를 .pem으로 변경하기만 하면 됩니다.저는 이걸 하기 위해 메모장을 사용했습니다.

인증서 경로에서 역순으로 인증서를 쌓습니다.그래서 위에서 *.google.com 으로 시작한 다음 그 아래에 Websense를 붙여넣고 CA 1 발행 등을 수행합니다.이렇게 하면 인증서가 위에서 아래로 구문 분석되어 적절한 루트 CA를 찾습니다.단순히 루트 CA를 포함하는 것만으로는 작동하지 않지만 모든 인증서를 포함할 필요도 없습니다.위 경로에서 Websense 인증서 앞에 오는 인증서(CA 1 발급, 정책 CA, 루트 CA)만 포함하면 됩니다.

이러한 자체 서명된 인증서가 PEM 파일에 저장되면 npm에게 이러한 인증서를 신뢰할 수 있는 CA로 사용하도록 지시할 준비가 되었습니다.구성 파일을 설정하기만 하면 다음 작업을 수행할 수 있습니다.

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

https)를 설정하고 를 "http"(https)로 합니다.https://registry.npmjs.org자체 서명된 인증서를 사용하여 회사 방화벽 뒤에 패키지를 설치할 수 있어야 합니다.strict-sslsetting

프록시 호스트 및 포트는 서버 관리자 또는 지원팀에서 가져옵니다.

설정 후

npm config set http_proxy http://username:password@proxyofmycomp.com:itsport
npm config set proxy http://username:password@proxyofmycomp.com:itsport

암호에 특수 문자가 있으면 %urlencode로 시도하십시오.예: - 파운드(해시)를 %23으로 대체해야 합니다.

이건 나한테 효과가 있었어요

다음과 같이 프록시를 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/"

프로젝트 폴더에 .npmrc 파일이라는 파일을 만들기만 하면 시스템 수준에서 프록시 설정을 피할 수 있습니다.

#Without password
proxy=http://ipaddress:80
https-proxy=http://ipaddress:80

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

프록시를 사용하지 않는 경우 이와 같은 의견을 제시합니다.

#proxy=http://ipaddress:80
#https-proxy=http://ipaddress:80

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

PAC 파일과 함께 npm을 사용하는 방법을 설명하는 기존 답변은 없습니다.일부에서는 PAC 파일을 다운로드하여 수동으로 검사하고 "PROCXY..." 문자열 중 하나를 선택할 것을 제안합니다.그러나 PAC 파일이 여러 프록시 중에서 선택해야 하거나 PAC 파일에 특정 URL에 대한 프록시를 바이패스하는 복잡한 논리가 포함된 경우에는 작동하지 않습니다.

또한 일부 회사 프록시에는 NTLM 인증이 필요합니다.CNTLM은 인증을 처리할 수 있지만 PAC 파일은 지원하지 않습니다.

대안은 Alpaca를 사용하여 JavaScript VM에서 PAC 파일을 실행하고 결과 프록시를 사용하여 NTLM 인증을 수행하는 것입니다.

비밀번호는 항상 필요한 것은 아니지만 선택 사항일 수도 있습니다.

여기에 많은 답이 있다는 것을 알지만, 솔직히 각 기관마다 어떤 것이 작동하는지는 다를 수 있습니다.저는 이 문제를 겪었고 시행착오를 거쳐 다음과 같은 일을 할 수 있습니다.

이 구성에 사용된 암호는 없으며 정상적으로 작동합니다.

을 직접 합니다..npmrc.C:\Users\your-username\아래의 디렉토리 및 적용 설정을 참조하십시오.새 명령 프롬프트 세션을 열어 변경 내용을 반영해야 합니다.

proxy=http://http.proxy.xxx.com:8000
registry=http://registry.npmjs.org/
strict-ssl=false

여기서 xxx는 나의 회사 이름입니다.여기서 프록시 URL을 직접 구성할 수는 없지만 텍스트 편집기에서 해당 파일을 열고 사용할 적절한 호스트 이름과 포트 번호를 찾을 수 있습니다.

Here is how it looks, to get an idea:

프록시를 사용하는 회사 네트워크 뒤에 있는 경우에는 ntlm 프록시 도구를 사용하고 ntlm에서 제공하는 포트와 프록시를 사용했습니다. 예를 들어 다음 구성을 사용했습니다.

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

이것이 도움이 되길 바랍니다.

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은 proxy ip이고 4128은 port입니다. 프록시 설정에 따라 변경합니다.

"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

이것을 시도해 보세요, 그것은 저에게 효과가 있는 유일한 것이었습니다.

npm --http://:@httphost: --http-http://:@httphost: --http-ssl false install -g package

옵션 --strict-ssl false에 주의하십시오.

행운을 빌어요.

수락된 답변에 언급된 NPM 프록시 설정은 문제를 해결하지만, 이 npm 문제에서 볼 수 있듯이 일부 종속성은 GIT를 사용하고 Git 프록시 설정을 필요로 하며 다음과 같이 수행할 수 있습니다.

git config --global http.proxy http://username:password@host:port
git config --global https.proxy http://username:password@host:port

NPM 프록시 설정이 언급되었습니다.

npm config set proxy "http://username:password@host:port"
npm config set https-proxy "http://username:password@host:port"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

회사에서는 ZScaler를 프록시로 사용합니다.제가 npm으로 출근할 수 있었던 유일한 방법은 Cntlm을 사용하는 것이었습니다.

다음 답변을 참조하십시오.

NTLM 프록시 뒤의 NPM

OS: 윈도우 7

나에게 효과적인 단계:

  1. npm config get proxy
  2. npm config get https-proxy

  3. 파일: 프록시 설정했습니다.
    npm config rm proxy

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

회사에서 프록시 설정을 설정하고 집에서 해제하는 데 문제가 있기 때문에 npm-corpo-proxy.sh 을 스크립팅하여 게시했습니다.모든 corpo에서 암호는 자주 변경되어야 하며 npm 구성을 공급하기 전에 인코딩해야 하는 특수 문자를 포함해야 합니다(backash form domain\user의 경우 동일).

구글에서 약간의 검색을 통해 제가 처음 시도한 것은 이것입니다.

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

은 " 설치를 시도할 때 이 끊기는 것처럼 . 저는 이 설치를 할 수 . 그리고 나서 나는 명령 프롬프트에서 이 줄을 실행했고 이제 npm 설치를 사용할 수 있습니다.

set NODE_TLS_REJECT_UNAUTHORIZED=0

저는 CNTLM과 함께 작동할 수 없었습니다.위에 게시된 모든 정보를 따르려고 했지만 프록시가 여전히 연결을 승인하지 않았습니다.Fiddler를 사용하면 설치하고 자동 인증 옵션을 선택하면 됩니다.그러나 작업하려면 사용자 폴더에서 .npmrc 파일을 제거하고 다음 값으로 환경 변수를 설정해야 했습니다.

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

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

저도 비슷한 문제가 있었고 위의 모든 해결 방법을 시도해 보았지만 어느 것도 제대로 작동하지 않았습니다(암호에 특수 문자(예: '@' 기호)를 사용하고 있었고 도메인 이름도 추가해야 했습니다)

그 외에도 일반 텍스트로 암호를 추가하는 것이 조금 걱정되었습니다.이 모든 문제를 해결하기 위한 가장 쉬운 해결책은 일종의 역방향 프록시(Fiddler와 같은)를 사용하는 것이었습니다.

저는 이미 SO에서 이 답변의 구성 단계를 자세히 설명했습니다.

.typingrc 파일에 아래 줄을 추가하는 것이 도움이 되었습니다.

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

비슷한 문제가 발생하여 npm 구성 파일(.npmrc)이 잘못된 레지스트리 항목을 가지고 있다는 것을 알게 되었습니다. 의견을 제시하고 rpm 설치를 다시 실행했습니다.효과가 있었습니다.

암호에 URL 인코딩을 사용하는 것을 잊지 마십시오.

사용자 이름 ="xyz" pwd ="filename#11"이라고 가정합니다.

그러면 C:\Users<username>.npmrc는 다음과 같아야 합니다.

proxy= http://domainname%5Cxyz:abc%2311@servername:port

servername : 인터넷 익스플로러의 pac 파일에서 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/25660936/using-npm-behind-corporate-proxy-pac

반응형