Come aggiorno Ruby Gems da dietro un proxy (ISA-NTLM)


232

Il firewall che sto dietro esegue il server Microsoft ISA in modalità solo NTLM. Hash qualcuno ha successo nel far installare / aggiornare le gemme Ruby tramite gemma SSPI Ruby o altro metodo?

... o sono solo pigro?

Nota: rubysspi-1.2.4 non funziona.

Questo funziona anche per "igem", parte del progetto IronRuby


Ho fatto funzionare rubysspi, ma sono richiesti molti violini. Se vuoi usarlo da una shell Git Bash, avrai bisogno di un alias aggiunto al tuo file .bashrc, come questo:alias gem='ruby -rspa `which gem`'
iconoclast

1
Se hai problemi con il proxy dopo aver eseguito la procedura nella maggior parte di queste risposte, prova ad sudoavere accesso alle variabili di ambiente aggiungendo l' -Esudo -E doSomething
opzione

Risposte:


214

Non sono riuscito a far funzionare il mio dall'opzione della riga di comando, ma sono stato in grado di farlo solo impostando la mia HTTP_PROXYvariabile di ambiente. (Nota che il caso sembra essere importante). Ho un file batch che ha una linea come questa:

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

Ho impostato le quattro variabili di riferimento prima di arrivare a questa linea ovviamente. Ad esempio, se il mio nome utente è "wolfbyte", la mia password è "segreta" e il mio proxy si chiama "pigsy" e funziona sulla porta 8080:

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

Potresti voler fare attenzione a come lo gestisci perché memorizza la tua password in testo normale nella sessione della macchina, ma non credo che dovrebbe essere un grosso problema.


6
Sembra che 'gem' non riesca a riconoscere le barre rovesciate nella stringa del proxy, sia tramite http_proxy env var sia con l'argomento --http-proxy. ad es. dalla mia casella Ubuntu --http-proxy http: // domain \\ userid @ server: port mi dà l'errore: "argomento non valido: --http-proxy ..."; Fortunatamente, il mio server proxy non ha richiesto le specifiche del dominio e gem ha funzionato senza di essa.
spoulson,

ISA consente all'amministratore di specificare un dominio predefinito per l'autenticazione. Puoi provare a lasciare il dominio e usare semplicemente il tuo nome utente come suggerisce spoulson. Se il tuo amministratore ISA ha specificato detto dominio predefinito e il tuo account utente si trova in quel dominio, questo dovrebbe funzionare per te (supponendo che non ci siano regole di blocco sul firewall)
squillman

11
@spoulson È necessario codificare l'URI della barra rovesciata se è necessario il dominio, ad esempio http: // domain% 5Cuserid @ server: port.
Ian G

13
Cordiali saluti, in Windows, è possibile aggiungere la riga http_proxy impostata a gem.bat in modo da non dover ricordare di impostare il proxy ogni volta.
Ed Manet,

1
A proposito, se la tua password contiene simboli speciali, dovresti urlencode. Ad esempio, sostituire @con %40ecc.
Andrey Regentov,

221

Per il sistema operativo Windows, ho usato Fiddler per aggirare il problema.

  1. Installa / esegui Fiddler da www.fiddler2.com
  2. Esegui gemma:

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

3
Ha funzionato a meraviglia, molto più facile di ntlmaps e cntlm.
atomici

36
Questo ha funzionato per me. Nota che Fiddler non è necessario in tutte le situazioni. Basta gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_nameè tutto ciò che era necessario per me.
Polaris878,

Su Windows 7, il flag --http-proxy deve andare dopo il nome gem, ad esempio gem install <gemaname> --http-proxy yourproxy.address; port . Altrimenti, si lamenterà di un parametro della riga di comando non valido.
Alek Davis,

Funziona su Windows 10
ggiunta il

Questo è ciò che ha funzionato per me dietro un proxy aziendale. Nessun violinista necessario. Ad esempio per installare jekyll gem basta eseguire: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph

129

Questo ha funzionato totalmente:

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

15
Questa è la risposta più aggiornata, funziona anche con Windows. Ho dovuto aggiungere il mio nome utente e la mia password però: gem install --http-proxy http: // [ utente ]: [ password ] @ [ server ]: [ porta ]
vanderwyst il

Non riuscivo a installare jekyll e continuavo a ricevere 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). Questo ha funzionato per me congem install --http-proxy http://127.0.0.1:8580 jekyll
Majid Fouladpour,

Ho aggiunto un alias al mio profilo bash: alias geminstall='gem install --http-proxy ${http_proxy}'per semplificarmi la vita.
bgStack15,

48

Ho usato cntlm ( http://cntlm.sourceforge.net/ ) al lavoro. La configurazione è molto simile a ntlmaps.

Funziona benissimo e mi permette anche di collegare la mia casella Ubuntu al proxy ISA.

Controlla http://cntlm.wiki.sourceforge.net/ per ulteriori informazioni


2
Questo è il modo meno doloroso di tutti provati. Su Ubuntu / Debian, eseguo apt-get install cntlm, modifico la configurazione e quindi esporta http_proxy = " localhost: 3128 ". Lavori!
Konrads,

Funziona perfettamente anche su Windows. Grazie!
Sottotitolo Pattnaik,

38

Ho provato alcune di queste soluzioni e nessuna ha funzionato. Alla fine ho trovato una soluzione che funziona per me:

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

utilizzando il -pparametro per passare il proxy. Sto usando Gem versione 1.9.1.


1
Ottenuto dall'installazione sostituendo la parte proxy con nome utente: password @ proxy_ip: proxyport
Gary Tsui

Ho dovuto aggiungere quello proxy_ipche viene utilizzato per le httpsconnessioni per funzionare! Fantastico: D (gem versione 2.0.14)
madlymad,

18

Crea un file .gemrc (in / etc / gemrc o ~ / .gemrc o per esempio con chef gem in / opt / chef / incorporato / etc / gemrc) contenente:

http_proxy: http://proxy:3128

Quindi puoi, gem installcome al solito.


Nel caso in cui funzioni utilizzando --http-proxyma non con un .gemrcfile, potrebbe provenire dalla sudoconfigurazione. Ho dovuto controllare il /etc/sudoersfile da aggiungere: Defaults env_keep = "http_proxy ftp_proxy"prima:Defaults env_reset
DependencyHell

16

Questo ha risolto perfettamente il mio problema:

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

Potrebbe essere necessario aggiungere il nome utente e la password:

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

11

In caso di problemi con l'autenticazione tramite il proxy, assicurarsi di impostare le variabili di ambiente esattamente nel formato seguente:

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

La user:password@sintassi non sembra funzionare e ci sono anche alcune variabili d'ambiente mal denominate che galleggiano su Stack Overflow e vari post del forum.

Inoltre, tieni presente che il download delle gemme può richiedere del tempo. All'inizio ho pensato che non funzionasse, ma con un po 'di pazienza hanno iniziato a scaricare come previsto.


Prendendo la punta di Benjamin Wootton ha funzionato alla grande sul mio laptop Windows 7 collegato alla LAN aziendale. Nella finestra della riga di comando al prompt del DOS ho impostato HTTP_PROXY come http: // localhost: 8888 (ignora gli spazi) e quindi ho usato il mio nome utente e password LAN rispettivamente per HTTP_PROXY_USER e HTTP_PROXY_PASS.
raycarr,

8

Ho provato tutte le soluzioni di cui sopra, tuttavia nessuna di esse ha funzionato. Se sei su linux / macOS ti consiglio vivamente di usare tsocks su un tunnel ssh. Ciò di cui hai bisogno per far funzionare questa configurazione è una macchina in cui puoi accedere tramite ssh e in aggiunta a ciò è installato un programma chiamato tsocks.

L'idea qui è di creare un tunnel dinamico tramite SSH (un proxy socks5). Configuriamo quindi tsocks per utilizzare questo tunnel e avviare le nostre applicazioni, in questo caso:

tsocks gem install ...

o per tenere conto delle rotaie 3.0:

tsocks bundle install

Una guida più dettagliata è disponibile sotto:

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

Nonostante sia stato scritto per Ubuntu, la procedura dovrebbe essere applicabile a tutte le macchine basate su Unix. Un'alternativa a tsocks per Windows è FreeCap ( http://www.freecap.ru/eng/ ). Un client SSH valido su Windows è chiamato putty.


Ho trovato l'articolo nei miei backup e l'ho appena ripubblicato con lo stesso URL.
ByScript

1
L'URL non è ancora disponibile. Quando si fornisce un collegamento a un sito di scambio fuori sede, non in pila, riepilogare le parti salienti qui e dare credito a quel sito. In questo modo, quando il collegamento si interrompe, la parte importante è ancora qui.
Tin Man,

7

I messaggi abbondano su questo argomento e per aiutare gli altri a risparmiare ore nel provare diverse soluzioni, ecco il risultato finale delle mie ore di armeggiamento.

Le tre soluzioni su Internet al momento sono: rubysspi apserver cntlm

rubysspi funziona solo da un computer Windows, AFAIK, poiché si basa sulla libreria Win32Api. Quindi, se ti trovi su una finestra di Windows e stai cercando di eseguire un proxy, questa è la soluzione che fa per te. Se sei su una distribuzione Linux, sei sfortunato.

apserver sembra essere un progetto morto. Il link elencato nei post che ho visto porta a 404 pagine su sourceforge. Cerco "apserver" su sourceforge non restituisce nulla.

Il link sourceforge per cntlm che ho visto reindirizza a http://cntlm.awk.cz/ , ma che scade . Una ricerca su sourceforge attiva questo link, che funziona: http://sourceforge.net/projects/cntlm/

Dopo aver scaricato e configurato cntlm sono riuscito a installare una gemma attraverso il proxy, quindi questa sembra essere la soluzione migliore per le distribuzioni Linux.


6

Risposta rapida: aggiungi la configurazione proxy con parametro sia per l'installazione / aggiornamento

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

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

5
Quando aggiungi una risposta a una domanda precedente con risposte esistenti, è utile spiegare cosa aggiunge la tua risposta.
Jason Aller,

per specificare il comando direttamente senza dettagli leggendo tutti i dettagli (risposte rapide)
Shantonu,

e, l'impostazione della variabile d'ambiente non è un'opzione per tutti (quando si esegue un solo aggiornamento)
Shantonu,

Per favore, aggiungi tutte le spiegazioni alla risposta stessa, non alla sezione commenti
Nico Haase,

5

Una soluzione alternativa è installare http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ sul computer locale, configurarlo ed eseguire gemme attraverso questo proxy.

  • Installa: basta scaricare apserver 097 (e non lo 098 sperimentale!) E decomprimere.
  • Configura: modifica il file server.cfg e inserisci i valori per il tuo proxy MS in PARENT_PROXYe PARENT_PROXY_PORT. Immettere i valori per DOMAIN e USER. Lascia vuoto PASSWORD (niente dopo i due punti): ti verrà richiesto all'avvio.
  • Esegui apserver: cd aps097; python main.py
  • Esegui gemme: gem install—http-proxy http://localhost:5865/ library

5
Leggi in un gruppo di Google che "apserver" è ora "NTLM Authorization Server"; peccato che la ricerca della prima non reindirizzi a quest'ultima.
Darren Bishop,

Ciao Jarin, sono andato al link che hai fornito nel tuo commento e non sono riuscito a trovare quel download. Esiste un modo per scaricarlo da qualsiasi altra parte?
Matrich,

1
@Matrich secondo il commento di Darren. apserver è ora rinominato e trovato qui: ntlmaps.sourceforge.net
atomicules

4

Sto lavorando dietro un proxy e ho appena installato SASS scaricando direttamente da http://rubygems.org .

Allora ho corso sudo gem install [path/to/downloaded/gem/file]. Non posso dire che funzionerà con tutte le gemme, ma potrebbe aiutare alcune persone.


3

Questo ha funzionato per me in una finestra di 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

Ho un file batch con queste righe che utilizzo per impostare i valori di ambiente quando ne ho bisogno.

Il trucco, nel mio caso, erano i HTTPS_PROXYset. Senza di loro, ho sempre ricevuto un errore di autenticazione proxy 407.


3

Se si utilizza un sistema * nix, utilizzare questo:

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

e quindi prova:

gem install ${gem_name}



1

Se dietro un proxy, puoi accedere ai download di Ruby , fai clic su Download, che scaricherà l'aggiornamento specificato (o Gem) nella posizione desiderata.

Successivamente, tramite la riga di comando di Ruby, vai alla posizione scaricata utilizzando: pushd [directory]

per esempio : pushd D:\Setups

quindi eseguire il comando seguente: gem install [update name] --local

ad es gem install rubygems-update --local. : .

Testato su Windows 7 con l'aggiornamento Ruby versione 2.4.1.

Per verificare utilizzare il seguente comando: ruby -v


1

Invece di modificare i file batch (che potresti dover fare per altre gemme di Ruby, ad esempio Bundler), è probabilmente meglio farlo una volta e farlo correttamente.

Su Windows, dietro il mio proxy aziendale, tutto quello che dovevo fare era aggiungere la HTTP_PROXYvariabile d'ambiente al mio sistema.

  1. Start -> tasto destro del mouse su Computer -> Proprietà
  2. Scegli "Impostazioni di sistema avanzate"
  3. Fare clic su Avanzate -> Variabili d'ambiente
  4. Creare una nuova variabile di sistema denominata " HTTP_PROXY" e impostare il valore sul server proxy
  5. Riavviare o disconnettersi e riconnettersi

A seconda dei requisiti di autenticazione, il HTTP_PROXYvalore può essere semplice come:

http://proxy-server-name

O più complesso come altri hanno sottolineato

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

0

per chiunque tunneling con SSH; puoi creare una versione del gemcomando che utilizza il proxy SOCKS:

  1. Installa socksifycon gem install socksify(dovrai almeno poter eseguire questo passaggio senza proxy)
  2. Copia il tuo ex gemma esistente

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Aprilo nel tuo editor preferito e aggiungilo in alto (dopo lo 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. Imposta il tuo tunnel

    ssh -D 8123 -f -C -q -N user@proxy
  5. Esegui il tuo comando gem con proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.