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

Brett Veenstra
fonte
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.

Mike Minutillo
fonte
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
Peter Moresi
fonte
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
SethRocker
fonte
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

Jason Navarrete
fonte
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.

kfox
fonte
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.

lukapiske
fonte
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
HomTom
fonte
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.

Benjamin Wootton
fonte
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.

Christian F
fonte
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.


fonte
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
Shantonu
fonte
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
Jarin Udom
fonte
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.

Zander
fonte
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.

Vigília Pedro García
fonte
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}
Saikrishna Rao
fonte
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

ArNumb
fonte
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
testworks
fonte
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
Mike Campbell
fonte