Como atualizo o Ruby Gems por trás de um proxy (ISA-NTLM)


232

O firewall que estou atrás está executando o Microsoft ISA Server no modo somente NTLM. Alguém hash tem sucesso em obter suas gemas Ruby para instalar / atualizar via gem SSPI Ruby ou outro método?

... ou estou apenas sendo preguiçoso?

Nota: rubysspi-1.2.4 não funciona.

Isso também funciona para "igem", parte do projeto IronRuby


Coloquei o rubysspi para trabalhar, mas é preciso muita brincadeira. Se você quiser usá-lo em um shell Git Bash, precisará de um alias adicionado ao seu arquivo .bashrc, como este:alias gem='ruby -rspa `which gem`'
iconoclast

1
Se você tem problemas de proxy depois de fazer os passos na maioria destas respostas, tente ter certeza que sudotem acesso a suas variáveis de ambiente, adicionando o -Einterruptor, por exemplo,sudo -E doSomething
kayleeFrye_onDeck

Respostas:


214

Não consegui fazer o meu funcionar na opção de linha de comando, mas consegui fazê-lo apenas definindo minha HTTP_PROXYvariável de ambiente. (Observe que o caso parece ser importante). Eu tenho um arquivo em lotes que possui uma linha como esta:

SET HTTP_PROXY=http://%USER%:%PASSWORD%@%SERVER%:%PORT%

Defino as quatro variáveis ​​referenciadas antes de chegar a essa linha obviamente. Como exemplo, se meu nome de usuário for "wolfbyte", minha senha for "secreta" e meu proxy for chamado "pigsy" e operar na porta 8080:

SET HTTP_PROXY=http://wolfbyte:secret@pigsy:8080

Você pode ter cuidado ao gerenciar isso, porque ele armazena sua senha em texto sem formatação na sessão da máquina, mas acho que não deve ser um problema demais.


6
Parece que 'gem' falha ao reconhecer barras invertidas na cadeia de proxy, seja por http_proxy env var ou pelo argumento --http-proxy. por exemplo, na minha caixa do Ubuntu --http-proxy http: // domain \\ userid @ server: port me dá o erro: "argumento inválido: --http-proxy ..."; Felizmente, meu servidor proxy não exigiu a especificação de domínio e a gem funcionou sem ela.
Spoulson 29/04/09

O ISA permite que o administrador especifique um domínio padrão para autenticação. Você pode tentar deixar de fora o domínio e apenas usar seu nome de usuário, como sugere Spoulson. Se o seu administrador ISA especificou disse domínio padrão e seu useraccount é nesse domínio, isso deve funcionar para você (assumindo que não estão bloqueando regras no firewall)
squillman

11
@spoulson Você precisa codificar a barra invertida se precisar do domínio, por exemplo, http: // domain% 5Cuserid @ server: port.
Ian em

13
Para sua informação, no Windows, você pode adicionar a linha http_proxy definida ao gem.bat, para não precisar se lembrar de definir o proxy todas as vezes.
Ed Manet

1
A propósito, se sua senha contiver símbolos especiais, você deverá codificá-los. Por exemplo, substitua @por %40etc
Andrey Regentov

221

Para o sistema operacional Windows, usei o Fiddler para solucionar o problema.

  1. Instalar / executar o Fiddler em www.fiddler2.com
  2. Executar gema:

    $ gem install --http-proxy http://localhost:8888 $gem_name

3
Trabalhou um tratamento, muito mais fácil do que ntlmaps e cntlm.
Atomicules

36
Isso funcionou para mim. Observe que o Fiddler não é necessário em todas as situações. Apenas gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_nameé tudo o que era necessário para mim.
precisa saber é o seguinte

No Windows 7, o sinalizador --http-proxy deve seguir o nome da gema, por exemplo, instalar a gem <gemaname> --http-proxy yourproxy.address; port . Caso contrário, ele reclamará de uma opção de linha de comando inválida.
Alek Davis 14/02

Funciona no Windows 10
ggiunta

Foi isso que funcionou para mim por trás de um proxy corporativo. Não é necessário violinista. Por exemplo, para instalar o jekyll gem, execute: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph

129

Isso funcionou totalmente:

gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name

15
Esta é a resposta mais atualizada, funciona com janelas também. Eu tive que adicionar o meu nome de usuário e senha no entanto: gem install --http-proxy http: // [ usuário ]: [ password ] @ [ servidor ]: [ port ]
Vanderwyst

Não consegui instalar o jekyll e continuei recebendo SSL_connect SYSCALL returned=5 errno=0 state=unknown state (https://rubygems.global.ssl.fastly.net/quick/Marshal.4.8/jekyll-3.0.0.gemspec.rz). Isso funcionou para mim comgem install --http-proxy http://127.0.0.1:8580 jekyll
Majid Fouladpour

Adicionei um alias ao meu perfil do bash: alias geminstall='gem install --http-proxy ${http_proxy}'para facilitar minha vida.
bgStack15

48

Eu tenho usado cntlm ( http://cntlm.sourceforge.net/ ) no trabalho. A configuração é muito semelhante ao ntlmaps.

Funciona muito bem e também me permite conectar minha caixa Ubuntu ao proxy ISA.

Confira http://cntlm.wiki.sourceforge.net/ para obter mais informações


2
Esta é a maneira menos dolorosa de todas. No Ubuntu / Debian, eu apt-get install cntlm, edito a configuração e depois exporto http_proxy = " localhost: 3128 ". Trabalho!
Konrads

Funciona perfeitamente no Windows também. Obrigado!
Subtudo Pattnaik

38

Tentei algumas dessas soluções, e nenhuma delas funcionou. Finalmente encontrei uma solução que funciona para mim:

gem install -p http://proxy_ip:proxy_port rails

usando o -pparâmetro para passar o proxy. Estou usando o Gem versão 1.9.1.


1
Got pelo instalação, substituindo a parte proxy para usuário: senha @ proxy_ip: proxyPort
Gary Tsui

Eu tive que adicionar o proxy_ipque é usado para httpsconexões, a fim de trabalhar! Great: D (versão gem 2.0.14)
madlymad 13/10/2015

18

Crie um arquivo .gemrc (em / etc / gemrc ou ~ / .gemrc ou, por exemplo, com chef gem em / opt / chef / incorporado / etc / gemrc) contendo:

http_proxy: http://proxy:3128

Então você pode, gem installcomo de costume.


Caso esteja funcionando, --http-proxymas não com um .gemrcarquivo, ele pode vir da sudoconfiguração. Eu tive que verificar o /etc/sudoersarquivo para adicionar: Defaults env_keep = "http_proxy ftp_proxy"antes:Defaults env_reset
DependencyHell

16

Isso resolveu meu problema perfeitamente:

gem install -p http://proxy_ip:proxy_port compass

Pode ser necessário adicionar seu nome de usuário e senha a ele:

gem install -p http://[username]:[password]@proxy_ip:proxy_port compass

11

Se você estiver tendo problemas para se autenticar através do seu proxy, certifique-se de definir as variáveis ​​de ambiente exatamente no formato abaixo:

set HTTP_PROXY=some.proxy.com
set HTTP_PROXY_USER=user
set HTTP_PROXY_PASS=password

A user:password@sintaxe parece não funcionar e também existem algumas variáveis ​​de ambiente com nomes incorretos flutuando no Stack Overflow e em várias postagens no fórum.

Também esteja ciente de que pode demorar um pouco para que suas gemas comecem a baixar. No começo, pensei que não estava funcionando, mas com um pouco de paciência eles começaram a baixar conforme o esperado.


Tomar a dica de Benjamin Wootton funcionou muito bem no meu laptop Windows 7 conectado à LAN corporativa. Na janela da linha de comando no prompt do DOS, defino o HTTP_PROXY como http: // localhost: 8888 (ignore os espaços) e usei meu nome de usuário e senha da LAN para HTTP_PROXY_USER e HTTP_PROXY_PASS, respectivamente.
raycarr

8

Eu tentei todas as soluções acima, mas nenhuma delas funcionou. Se você estiver no linux / macOS, sugiro o uso de tsocks em um túnel ssh. O que você precisa para que essa configuração funcione é uma máquina na qual você possa efetuar login via ssh e, além disso, um programa chamado tsocks instalado.

A idéia aqui é criar um túnel dinâmico via SSH (um proxy socks5). Em seguida, configuramos os tsocks para usar esse túnel e iniciar nossos aplicativos, neste caso:

tsocks gem install ...

ou para contabilizar o Rails 3.0:

tsocks bundle install

Um guia mais detalhado pode ser encontrado em:

http://blog.byscripts.info/2011/04/bypass-a-proxy-with-ssh-tunnel-and-tsocks-under-ubuntu/

Apesar de ter sido escrito para o Ubuntu, o procedimento deve ser aplicável a todas as máquinas baseadas em Unix. Uma alternativa aos tsocks para Windows é o FreeCap ( http://www.freecap.ru/eng/ ). Um cliente SSH viável no Windows é chamado de massa de vidraceiro.


Encontrei o artigo nos meus backups e o publiquei novamente com o mesmo URL.
ByScripts

1
O URL ainda não está disponível. Ao fornecer um link para um site externo e não Stack Exchange, resuma as partes mais importantes aqui e dê crédito a esse site. Dessa forma, quando o link se rompe, a parte importante ainda está aqui.
o homem de lata

7

Há muitas publicações sobre esse tópico e, para ajudar outras pessoas a economizar horas tentando soluções diferentes, aqui está o resultado final das minhas horas de mexer.

As três soluções atualmente disponíveis na Internet são: rubysspi apserver cntlm

O rubysspi funciona apenas em uma máquina Windows, AFAIK, pois depende da biblioteca Win32Api. Portanto, se você estiver em uma caixa do Windows tentando executar um proxy, esta é a solução para você. Se você está em uma distribuição Linux, está sem sorte.

apserver parece ser um projeto morto. O link listado nas postagens que eu vi levou à página 404 no sourceforge. Eu procuro por "apserver" no sourceforge não retorna nada.

O link sourceforge para o cntlm que eu vi redireciona para http://cntlm.awk.cz/ , mas esse tempo excede o tempo limite. Uma pesquisa no sourceforge exibe esse link, que funciona: http://sourceforge.net/projects/cntlm/

Depois de baixar e configurar o cntlm, consegui instalar uma jóia por meio do proxy, portanto essa parece ser a melhor solução para as distribuições do Linux.


6

Resposta rápida: adicione configuração de proxy com parâmetro para instalação / atualização

gem install --http-proxy http://host:port/ package_name

gem update --http-proxy http://host:port/ package_name

5
Ao adicionar uma resposta a uma pergunta mais antiga com respostas existentes, é útil explicar o que sua resposta acrescenta que é novo.
Jason Aller

para especificar comando diretamente sem detalhes lendo todos os detalhes (respostas rápidas)
Shantonu

e, fixando variável de ambiente não é uma opção para todos (quando você fazer apenas uma atualização de tempo)
Shantonu

Por favor, adicione todas as explicações para a resposta em si, não para a seção de comentários
Nico Haase

5

Uma solução alternativa é instalar http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ na sua máquina local, configurá-la e executar gems através desse proxy.

  • Instalação: basta baixar o apserver 097 (e não o experimental 098!) E descompactar.
  • Configure: Edite o arquivo server.cfg e coloque os valores para o seu proxy MS em PARENT_PROXYe PARENT_PROXY_PORT. Digite os valores para DOMAIN e USER. Deixe PASSWORD em branco (nada após os dois pontos) - você será solicitado ao iniciá-lo.
  • Execute apserver: cd aps097; python main.py
  • Executar gemas: gem install—http-proxy http://localhost:5865/ library

5
Leia em um grupo do Google que 'apserver' agora é 'NTLM Authorization Server'; pena que a pesquisa pelo primeiro não redirecione para o último.
Darren Bishop

Olá Jarin, Fui ao link que você forneceu no seu comentário e não conseguiu encontrar o download. Existe alguma maneira de baixá-lo de qualquer outro lugar?
Matrich 26/08/10

1
@Matrich conforme comentário de Darren. apserver agora é renomeado e encontrado aqui: ntlmaps.sourceforge.net
atomicules

4

Estou trabalhando com um proxy e apenas instalei o SASS baixando diretamente do http://rubygems.org .

Eu então corri sudo gem install [path/to/downloaded/gem/file]. Não posso dizer que isso funcione para todas as gemas, mas pode ajudar algumas pessoas.


3

Isso funcionou para mim em uma caixa do Windows:

set HTTP_PROXY=http://server:port
set HTTP_PROXY_USER=username
set HTTP_PROXY_PASS=userparssword
set HTTPS_PROXY=http://server:port
set HTTPS_PROXY_USER=username
set HTTPS_PROXY_PASS=userpassword

Eu tenho um arquivo em lotes com essas linhas que eu uso para definir valores de ambiente quando necessário.

O truque, no meu caso, foram os HTTPS_PROXYsets. Sem eles, eu sempre obtinha um erro de autenticação de proxy 407.


3

Se você estiver em um sistema * nix, use o seguinte:

export http_proxy=http://${proxy.host}:${port}
export https_proxy=http://${proxy.host}:${port}

e tente:

gem install ${gem_name}



1

Se estiver atrás de um proxy, você poderá navegar para downloads do Ruby , clique em Download, que fará o download da atualização especificada (ou Gem) para o local desejado.

Em seguida, via linha de comando Ruby, navegue até o local baixado usando: pushd [directory]

por exemplo : pushd D:\Setups

em seguida, execute o seguinte comando: gem install [update name] --local

por exemplo: gem install rubygems-update --local.

Testado no Windows 7 com Ruby atualização versão 2.4.1.

Para verificar, use o seguinte comando: ruby -v


1

Em vez de editar arquivos em lote (o que você pode fazer em outras gemas Ruby, por exemplo, Bundler), provavelmente é melhor fazer isso uma vez e fazê-lo corretamente.

No Windows, por trás do meu proxy corporativo, tudo que eu precisava fazer era adicionar a HTTP_PROXYvariável de ambiente ao meu sistema.

  1. Iniciar -> clique com o botão direito do mouse em Computador -> Propriedades
  2. Escolha "Configurações avançadas do sistema"
  3. Clique em Avançado -> Variáveis ​​de Ambiente
  4. Crie uma nova variável de sistema chamada " HTTP_PROXY" e defina o valor como seu servidor proxy
  5. Reinicialize ou efetue logout e faça login novamente

Dependendo dos seus requisitos de autenticação, o HTTP_PROXYvalor pode ser tão simples quanto:

http://proxy-server-name

Ou mais complexo como outros já apontaram

http://username:password@proxy-server-name:port-number

0

para qualquer pessoa que faça tunelamento com SSH; você pode criar uma versão do gemcomando que usa o proxy SOCKS:

  1. Instale socksifycom gem install socksify(você precisará poder executar esta etapa sem proxy, pelo menos)
  2. Copie seu gem existente

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Abra-o no seu editor favorito e adicione-o no topo (após o shebang)

    require 'socksify'
    
    if ENV['SOCKS_PROXY']
      require 'socksify'
      host, port = ENV['SOCKS_PROXY'].split(':')
      TCPSocket.socks_server = host || 'localhost'
      TCPSocket.socks_port = port.to_i || 1080
    end
  4. Configure seu túnel

    ssh -D 8123 -f -C -q -N user@proxy
  5. Execute seu comando gem com proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.