¿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

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

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

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

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

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

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

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


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

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

Pedro García Vigil
fuente
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}
Saikrishna Rao
fuente
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

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