¿Cómo actualizo Ruby Gems desde detrás de un Proxy (ISA-NTLM)


232

El firewall que estoy detrás ejecuta el servidor Microsoft ISA en modo solo NTLM. ¿Alguien ha tenido éxito al hacer que sus gemas Ruby se instalen / actualicen a través de la gema Ruby SSPI u otro método?

... o solo estoy siendo vago?

Nota: rubysspi-1.2.4 no funciona.

Esto también funciona para "igem", parte del proyecto IronRuby


Obtuve rubysspi para trabajar, pero se necesita mucho violín. Si desea usarlo desde un shell Git Bash, necesitará un alias agregado a su archivo .bashrc, como este:alias gem='ruby -rspa `which gem`'
iconoclast

1
Si tiene problemas de proxy después de seguir los pasos de la mayoría de estas respuestas, intente asegurarse de que sudotenga acceso a las variables de entorno agregando el -Einterruptor, por ejemplo,sudo -E doSomething
kayleeFrye_onDeck

Respuestas:


214

No pude hacer que el mío funcionara desde el interruptor de línea de comandos, pero pude hacerlo simplemente configurando mi HTTP_PROXYvariable de entorno. (Tenga en cuenta que el caso parece ser importante). Tengo un archivo por lotes que tiene una línea como esta:

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

Configuré las cuatro variables referenciadas antes de llegar a esta línea, obviamente. Como ejemplo, si mi nombre de usuario es "wolfbyte", mi contraseña es "secreta" y mi proxy se llama "pigsy" y opera en el puerto 8080:

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

Es posible que desee tener cuidado de cómo lo maneja porque almacena su contraseña en texto sin formato en la sesión de la máquina, pero no creo que deba ser un problema.


66
Parece que 'gem' no reconoce las barras invertidas en la cadena proxy, ya sea por http_proxy env var o --http-proxy argumento. por ejemplo, desde mi casilla de Ubuntu --http-proxy http: // domain \\ userid @ server: port me da el error: "argumento no válido: --http-proxy ..."; Afortunadamente, mi servidor proxy no requería la especificación del dominio y la gema funcionaba sin ella.
spoulson

ISA le permite al administrador especificar un dominio predeterminado para autenticarse. Puede intentar omitir el dominio y simplemente usar su nombre de usuario como sugiere spoulson. Si el administrador de ISA ha especificado dicho dominio predeterminado y su UserAccount está en ese dominio, esto debería funcionar para usted (suponiendo que no están bloqueando las reglas en el firewall)
squillman

11
@spoulson Debe codificar en URI la barra diagonal inversa si necesita el dominio, por ejemplo, http: // dominio% 5Cuserid @ servidor: puerto.
Ian G

13
Para su información, en Windows, puede agregar la línea set http_proxy a gem.bat para que no tenga que acordarse de configurar el proxy cada vez.
Ed Manet

1
Por cierto, si su contraseña contiene símbolos especiales, debe codificarlos. Por ejemplo, reemplazar @con %40etc.
Andrey Regentov

221

Para el sistema operativo Windows, utilicé Fiddler para solucionar el problema.

  1. Instalar / ejecutar Fiddler desde www.fiddler2.com
  2. Ejecutar gema:

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

3
Funcionó de maravilla, mucho más fácil que ntlmaps y cntlm.
atomicules

36
Esto funcionó para mí. Tenga en cuenta que Fiddler no es necesario en todas las situaciones. Solo gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_namees todo lo que se necesitaba para mí.
Polaris878

En Windows 7, el indicador --http-proxy debe ir después del nombre de la gema, por ejemplo, gem install <gemaname> --http-proxy yourproxy.address; port . De lo contrario, se quejará de un cambio de línea de comandos no válido.
Alek Davis

Funciona en Windows 10
ggiunta

Esto es lo que funcionó para mí detrás de un proxy corporativo. No se necesita violinista. Por ejemplo, para instalar jekyll gem simplemente ejecute: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph

129

Esto funcionó totalmente:

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

15
Esta es la respuesta más actualizada, también funciona con Windows. Sin embargo, tuve que agregar mi nombre de usuario y contraseña: gem install --http-proxy http: // [ user ]: [ contraseña ] @ [ servidor ]: [ puerto ]
vanderwyst

No pude instalar jekyll y seguí obteniendo 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). Esto funcionó para mí congem install --http-proxy http://127.0.0.1:8580 jekyll
Majid Fouladpour el

Agregué un alias a mi perfil de bash: alias geminstall='gem install --http-proxy ${http_proxy}'para hacerme la vida más fácil.
bgStack15

48

He estado usando cntlm ( http://cntlm.sourceforge.net/ ) en el trabajo. La configuración es muy similar a ntlmaps.

Funciona muy bien, y también me permite conectar mi caja de Ubuntu al proxy ISA.

Visite http://cntlm.wiki.sourceforge.net/ para obtener más información.


2
Esta es la forma menos dolorosa de todos los probados. En Ubuntu / Debian, hago apt-get install cntlm, edito config y luego exporto http_proxy = " localhost: 3128 ". ¡Trabajos!
Konrads

Funciona perfectamente en ventanas también. ¡Gracias!
Subrat Pattnaik

38

Probé algunas de estas soluciones y ninguna funcionó. Finalmente encontré una solución que funciona para mí:

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

usando el -pparámetro para pasar el proxy. Estoy usando Gem versión 1.9.1.


1
Obtuve la instalación reemplazando la parte proxy por nombre
Gary Tsui

¡Tuve que agregar el proxy_ipque se usa para las httpsconexiones para trabajar! Genial: D (gem versión 2.0.14)
madlymad

18

Cree un archivo .gemrc (en / etc / gemrc o ~ / .gemrc o, por ejemplo, con chef gem en / opt / chef / embedded / etc / gemrc) que contenga:

http_proxy: http://proxy:3128

Entonces puedes gem installcomo siempre.


En caso de que funcione usando --http-proxypero no con un .gemrcarchivo, puede provenir de la sudoconfiguración. Tuve que verificar el /etc/sudoersarchivo para agregar: Defaults env_keep = "http_proxy ftp_proxy"antes:Defaults env_reset
DependencyHell

16

Esto resolvió mi problema perfectamente:

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

Es posible que deba agregarle su nombre de usuario y contraseña:

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

11

Si tiene problemas para autenticarse a través de su proxy, asegúrese de configurar las variables de entorno exactamente en el siguiente formato:

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

La user:password@sintaxis no parece funcionar y también hay algunas variables de entorno mal nombradas que flotan en Stack Overflow y en varias publicaciones del foro.

También tenga en cuenta que las gemas pueden tardar un tiempo en comenzar a descargarse. Al principio pensé que no estaba funcionando, pero con un poco de paciencia comenzaron a descargar como se esperaba.


Tomar el consejo de Benjamin Wootton funcionó muy bien en mi computadora portátil Windows 7 conectada a la LAN corporativa. En la ventana de línea de comando en el indicador de DOS, configuré HTTP_PROXY como http: // localhost: 8888 (ignorar los espacios) y luego utilicé mi nombre de usuario y contraseña de LAN para HTTP_PROXY_USER y HTTP_PROXY_PASS respectivamente.
raycarr

8

Probé todas las soluciones anteriores, sin embargo, ninguna funcionó. Si estás en linux / macOS, te recomiendo usar tsocks sobre un túnel ssh. Lo que necesita para que esta configuración funcione es una máquina donde puede iniciar sesión a través de ssh, y además de eso, se instaló un programa llamado tsocks.

La idea aquí es crear un túnel dinámico a través de SSH (un proxy socks5). Luego configuramos tsocks para usar este túnel e iniciar nuestras aplicaciones, en este caso:

tsocks gem install ...

o para tener en cuenta los rieles 3.0:

tsocks bundle install

Puede encontrar una guía más detallada en:

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

A pesar de estar escrito para Ubuntu, el procedimiento debería ser aplicable para todas las máquinas basadas en Unix. Una alternativa a tsocks para Windows es FreeCap ( http://www.freecap.ru/eng/ ). Un cliente SSH viable en Windows se llama masilla.


Encontré el artículo en mis copias de seguridad y simplemente lo volví a publicar con la misma URL.
ByScripts

1
La URL aún no está disponible. Cuando proporcione un enlace a un sitio externo que no sea Stack Exchange, resuma las partes más destacadas aquí y dé crédito a ese sitio. De esa manera, cuando se rompe el enlace, la parte importante todavía está aquí.
The Tin Man

7

Abundan las publicaciones sobre este tema, y ​​para ayudar a otros a ahorrar horas de probar diferentes soluciones, este es el resultado final de mis horas de retoques.

Las tres soluciones en Internet en este momento son: rubysspi apserver cntlm

rubysspi solo funciona desde una máquina Windows, AFAIK, ya que se basa en la biblioteca Win32Api. Entonces, si está en una caja de Windows tratando de ejecutar un proxy, esta es la solución para usted. Si estás en una distribución de Linux, no tienes suerte.

apserver parece ser un proyecto muerto. El enlace que aparece en las publicaciones que he visto conduce a la página 404 en sourceforge. Busco "apserver" en sourceforge no devuelve nada.

El enlace de sourceforge para cntlm que he visto redirige a http://cntlm.awk.cz/ , pero se agota el tiempo de espera. Una búsqueda en sourceforge muestra este enlace, que funciona: http://sourceforge.net/projects/cntlm/

Después de descargar y configurar cntlm, he logrado instalar una gema a través del proxy, por lo que esta parece ser la mejor solución para las distribuciones de Linux.


6

Respuesta rápida: agregue la configuración de proxy con el parámetro para instalar / actualizar

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

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

55
Al agregar una respuesta a una pregunta anterior con respuestas existentes, es útil explicar qué agrega su respuesta que es nueva.
Jason Aller

para especificar comando directamente sin detalles de leer todos los detalles (respuestas rápidas)
Shantonu

y, la configuración de la variable de entorno no es una opción para todos (cuando solo se actualiza una vez)
Shantonu

Agregue toda la explicación a la respuesta en sí, no a la sección de comentarios
Nico Haase

5

Una solución alternativa es instalar http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ en su máquina local, configurarlo y ejecutar gemas a través de este proxy.

  • Instalar: solo descarga apserver 097 (¡y no el experimental 098!) Y descomprime.
  • Configurar: edite el archivo server.cfg y coloque los valores para su proxy MS en PARENT_PROXYy PARENT_PROXY_PORT. Ingrese los valores para DOMINIO y USUARIO. Deje la CONTRASEÑA en blanco (nada después de los dos puntos): se le solicitará que la inicie.
  • Ejecute un servidor: cd aps097; python main.py
  • Ejecutar gemas: gem install—http-proxy http://localhost:5865/ library

55
Lea en un grupo de google que 'apserver' ahora es 'NTLM Authorization Server'; lástima que buscar el primero no redirija a ese último.
Darren Bishop el

Hola Jarin, fui al enlace que proporcionaste en tu comentario y no pude encontrar esa descarga. ¿Hay alguna forma de descargarlo desde otro lugar?
Matrich el

1
@Matrich según el comentario de Darren. apserver ahora se renombra y se encuentra aquí: ntlmaps.sourceforge.net
atomicules

4

Estoy trabajando detrás de un proxy y acabo de instalar SASS descargándolo directamente de http://rubygems.org .

Entonces corrí sudo gem install [path/to/downloaded/gem/file]. No puedo decir que esto funcionará para todas las gemas, pero puede ayudar a algunas personas.


3

Esto funcionó para mí en una caja de 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

Tengo un archivo por lotes con estas líneas que utilizo para establecer los valores del entorno cuando lo necesito.

El truco, en mi caso, fueron los HTTPS_PROXYsets. Sin ellos, siempre recibí un error de autenticación de proxy 407.


3

Si está en un sistema * nix, use esto:

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

y luego intente:

gem install ${gem_name}



1

Si está detrás de un proxy, puede navegar hasta las descargas de Ruby , haga clic en Descargar, que descargará la actualización (o Gema) especificada en la ubicación deseada.

Luego, a través de la línea de comando Ruby, navegue a la ubicación descargada usando: pushd [directory]

p.ej : pushd D:\Setups

luego ejecute el siguiente comando: gem install [update name] --local

p.ej: gem install rubygems-update --local .

Probado en Windows 7 con la actualización de Ruby versión 2.4.1.

Para verificar use el siguiente comando: ruby -v


1

En lugar de editar archivos por lotes (que puede que tenga que hacer para otras gemas de Ruby, por ejemplo, Bundler), probablemente sea mejor hacerlo una vez y hacerlo correctamente.

En Windows, detrás de mi proxy corporativo, todo lo que tenía que hacer era agregar la HTTP_PROXYvariable de entorno a mi sistema.

  1. Inicio -> haga clic derecho en Computadora -> Propiedades
  2. Elija "Configuración avanzada del sistema"
  3. Haga clic en Avanzado -> Variables de entorno
  4. Cree una nueva variable del sistema llamada " HTTP_PROXY" y establezca el Valor en su servidor proxy
  5. Reiniciar o cerrar sesión y volver a iniciarla

Dependiendo de sus requisitos de autenticación, el HTTP_PROXYvalor puede ser tan simple como:

http://proxy-server-name

O más complejo como otros han señalado

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

0

para cualquiera que esté haciendo un túnel con SSH; puede crear una versión del gemcomando que use el proxy SOCKS:

  1. Instale socksifycon gem install socksify(deberá poder realizar este paso sin proxy, al menos)
  2. Copia tu gema existente exe

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Ábralo en su editor favorito y agréguelo en la parte superior (después del 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. Configura tu túnel

    ssh -D 8123 -f -C -q -N user@proxy
  5. Ejecute su comando gema con proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.