Como instalar o NPM por trás do proxy de autenticação no Windows?

30

Preciso executar a versão mais recente do Node e NPM no Windows. Instalei o Node 0.5.8 e baixei as fontes do NPM no GitHub. As etapas que segui para instalar o NPM foram listadas no site do GitHub, mas tenho um problema ao executar o seguinte comando:

node cli.js install npm -gf

mas falha com a seguinte mensagem de erro:

Error: connect UNKNOWN
at errnoException (net_uv.js:566:11)
at Object.afterConnect [as oncomplete] (net_uv.js:557:18)

System Windows_NT 5.1.2600
command "...\\Node\\bin\\node.exe" "...\\npm\\cli.js" "install" "npm" "-gf"
cwd ...\npm
node -v v0.5.8
npm -v 1.0.94
code UNKNOWN

Acho que isso é um problema, pois preciso de autenticação no meu proxy para conectar-me à Internet. Mas não encontrei maneira de dizer ao instalador para usar minhas credenciais para o login. Existe a possibilidade de fornecer meu IP de proxy e informações de login para a instalação do npm talvez por meio de argumentos da linha de comando?

Posso fornecer o log completo (mas parece não ter mais informações relevantes) usando pastebin, se necessário.

Tobias
fonte
6
Um pequeno truque, se o nome de usuário contém o domínio \ notação usuário substituto a barra invertida com o código http escape (% 5C)
@layos Muito obrigado. Se isso fosse reddit, eu daria a você ouro.
31513 Korinna

Respostas:

39

set http_proxyfuncionou muito bem para mim, mas eu precisava inseri-lo toda vez que abria o prompt de comando. Então eu tive que combinar várias respostas e agora a minha é permanente.

Minha sequência foi a seguinte:

  • Vamos para C:\Users\YourUserName
  • Crie um arquivo chamado .npmrc
  • Dentro desse arquivo, digite o seguinte (se você estiver em um domínio do AD):

proxy = http://domain\\username:password@ip:port

  • Ou use isto: você NÃO está em um domínio do AD:

proxy = http://username:password@ip:port

  • Salve o arquivo
  • Abra um prompt de comando e tente usar npm

Outros tiveram sucesso extra com o seguinte comando extra:

strict-ssl = false

* Você deve poder usar um endereço IP ou o URL para o proxy no lugar de "IP" acima.

Pode ser necessário ajustar um pouco a sua sequência de proxy, mas isso fez com que eu não precisasse adicionar isso todas as vezes.

Felicidades

Eric Steinborn
fonte
3
Atenção, se sua senha contiver "@" npm não analisará sua configuração de proxy corretamente. Uma solução potencial é colocar um nome de usuário falso: senha na configuração do npm e usar um proxy local (como um violinista) para modificar o cabeçalho de Autorização de Proxy da solicitação para ter o nome de usuário correto: senha. Lembre-se de que o nome de usuário: a senha armazenada na Autorização Proxy é codificada em base64.
BStruthers
9
Tenho o meu para trabalhar com:proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false
Luke
1
Não recebemos mina para trabalhar com username: password
philx_x
1
Ei, eu tentei usar domain\\user:password@urltoproxy:portno entanto, quando executo npm installa opção muda para domain/user:password@urltoproxy:portEntão, como faço para resolver isso?
Jacob Schneider
Estou tendo o mesmo problema que @JacobSchneider, no meu .npmrc: -ssl=false registry=http://registry.npmjs.org/ proxy=http://domain\\username:password#@proxy.url:8080 então, quando eu configuro o config com npm config get proxy: http://domain/username:password#@proxy.url:8080 observe que a barra invertida escapada '\\' muda para uma barra '/'
pompalini 04/04
10

Talvez a configuração de uma variável de ambiente funcione para você:

set HTTP_PROXY=http://user:[email protected]:port

(No meu caso, isso resolve o "connect UNKNOWN", mas recebo um erro "socket hang up" completamente diferente. Também tentei definir a variável de ambiente HTTPS_PROXY, mas obtive o mesmo resultado.)

nafisto
fonte
Tentei definir a variável de ambiente e também passei o comando --proxy user: [email protected]: port para o comando, mas agora sempre recebo ECONNREFUSED .. Preciso especificar meu domínio do AD para o login do proxy?
Tobias
@Tobias tryset HTTP_PROXY=http://domain\user:[email protected]:port
Adam Grant
8

Eu tive esse problema idêntico e aqui está o que eu fiz para fazer esse trabalho:

  • Vamos para: C:\Users\YourUserName
  • Crie um arquivo chamado .npmrc
  • E sua entrada será:

    registry = http://registry.npmjs.org
    
  • Tente o comando node cli.js install npm -gfnovamente.

sam
fonte
Eu criei o arquivo com o conteúdo que você mencionou, mas ainda obter o erro desconhecido connect :(
Tobias
Um brinde por isso. Fiz um "npm config set registry registry.npmjs.org " para contornar o https: // e tudo está bem na instalação do Windows.
Gavin Gilmour
1
se alguém recebe a mensagem ETIMEOUT adicionar configuração de proxy comnode config set proxy http://username:password@server:port
Jeremy S.
O que funcionou para mim foi a criação do ~/.npmrcarquivo, como acima, que diz npm usar o http://registro em vez de https://, e em seguida, definir a minha http_proxyvariável de ambiente parahttp://myusername:[email protected]:1234
Maxy-B
Atenção, se sua senha contiver "@" npm não analisará sua configuração de proxy corretamente. Uma solução potencial é colocar um nome de usuário falso: senha na configuração do npm e usar um proxy local (como um violinista) para modificar o cabeçalho de Autorização de Proxy da solicitação para ter o nome de usuário correto: senha. Lembre-se de que o nome de usuário: a senha armazenada na Autorização Proxy é codificada em base64.
BStruthers
4

Após algumas pesquisas, eu poderia usá-lo desta maneira:

  1. Instale o servidor proxy de autorização NTLM ou outro servidor proxy para NTLM, como Cntlm. Pessoalmente, prefiro o servidor python, porque posso mexer nele, e o desempenho não é um problema.

  2. Defina a configuração; observe que, no meu caso, eu tive que ativar os modos LM e NT e suspeitaria que seja o caso normal atualmente.

  3. Defina a variável de ambiente http_proxy e https_proxy para apontar para o seu proxy local:

    definir http_proxy = "localhost: 5865"
    definir https_proxy = "localhost: 5865"

  4. O npm deve funcionar agora, é claro que deve ser executado a partir de um shell onde as variáveis ​​de ambiente acima são definidas.

roubar
fonte
3

O seguinte funcionou para mim.

No Windows 7:

npm config set proxy xxhttp://username:password@proxyhost:port# 

Isso deve criar um arquivo nomeado .npmrcna C:/users/<username>pasta

Chummar
fonte
3

Digite isso na linha de comando:

npm set proxy http://user:pass@ip:port

npm set https-proxy http://user:pass@ip:port

NÃO ESQUEÇA DE INCLUIR HTTP: // antes do seu nome de usuário. Funcionou para mim.

Super Luvdub
fonte
2

Esse problema foi resolvido depois de criar o arquivo .npmrc, conforme descrito acima, e executar o comando adduser e seguir as instruções do cmd.

npm adduser

Execute o seguinte comando para verificar se você possui um nome de usuário autorizado:

npm whoami
John
fonte
2

Cada uma das respostas acima precisa que o usuário escreva sua senha em um arquivo de texto ou em uma variável de ambiente.

Pessoalmente, não gostei de uma solução como essa, por sua abordagem insegura. Por isso, tentei escrever um aplicativo que injeta o token Kerberos do usuário atual nas trocas entre o cliente (npm, bower, git) e o proxy. Dito isto, o Active Directory é apenas uma implementação proprietária do Kerberos.

Eu uso esse software todos os dias, em um host do Windows 8.1. Você pode encontrar o código (golang) e os binários da primeira versão em https://github.com/nilleb/authentication-proxy .

nilleb
fonte
1

Todas as três coisas funcionaram para mim em .npmrc

proxy = http://unam:pwd@host:port
https-proxy = http://unam:pwd@host:port
registry = http://registry.npmjs.org
catrapture
fonte
1

Pelo menos no Windows, ele funciona para mim com a seguinte configuração:

proxy = http: // domínio % 5C nome de usuário : senha @ proxy_ip : porta

ou seja, (1) use em %5Cvez de \(como sugerido em outro lugar) e (2) use o endereço IP em vez do nome da máquina local para o servidor proxy.

Ganesh
fonte
Isso está correto - o domínio + o nome de usuário e a senha precisam ser codificados em URL separadamente. Por exemplo, se você tiver # em sua senha, substitua-o por% 23
saille 14/08/15
1

Você receberá o host e a porta do proxy do administrador ou do suporte do servidor.

Depois disso configurado

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

Se houver algum caractere especial na senha, tente com% urlencode. Por exemplo: - libra (hash) deve ser substituída por% 23.

Shamseer
fonte
2
A quais versões sua resposta se aplica, considerando que a pergunta foi feita há mais de 3 anos?
Jason Aller
Eu acredito que isso não importa. Eu encontrei a solução para este problema depois de tentar muito e nunca soube que minha senha estava fazendo ordem issue.In para torná-lo anwser perfeito nenhuma pergunta assunto foi perguntado antes mesmo de dez anos:) ...
Shamseer
0

A solução trabalhada para mim é a seguinte:

npm config set http_proxy http: // nome do usuário : senha @ host / IP : porta

proxy do conjunto de configurações npm http: // nome do usuário : senha @ host / IP : porta

substituir os parâmetros pelos valores, no meu caso

nome de usuário : (vazio)

senha : (vazia)

host / IP : 192.36.36.110

porta : 8080

então meus comandos são

conjunto de configurações npm http_proxy http: //: @ 192.36.36.110: 8080

proxy do conjunto de configurações npm http: //: @ 192.36.36.110: 8080

srujan maddula
fonte
0

O CNTLM não funcionou para mim. Eu tentei todas as combinações possíveis. O NPM estava dando erro de autenticação. Violinista veio em busca de resgate e economizou meu tempo. É fácil de instalar e configurar. Defina a regra do violinista como Autenticada automaticamente. Em .npmrc, defina

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

Funcionou para mim :)

user588459
fonte
0

O que funcionou para mim foi o seguinte:

registry=http://registry.npmjs.org
proxy=http://<url.pac>
https-proxy=http://<url.pac>
http-proxy=http://<url.pac>
strict-ssl=false

Não precisei inserir nomes de usuário ou senhas, simplesmente o URL do arquivo PAC.

Kunal Nanda
fonte