Comment mettre à jour Ruby Gems derrière un proxy (ISA-NTLM)

232

Le pare-feu derrière lequel j'exécute exécute le serveur Microsoft ISA en mode NTLM uniquement. Est-ce que quelqu'un a réussi à installer / mettre à jour ses gemmes Ruby via Ruby SSPI gem ou une autre méthode?

... ou suis-je juste paresseux?

Remarque: rubysspi-1.2.4 ne fonctionne pas.

Cela fonctionne également pour "igem", une partie du projet IronRuby

Brett Veenstra
la source
J'ai mis Rubysspi au travail, mais il faut beaucoup de violon. Si vous souhaitez l'utiliser à partir d'un shell Git Bash, vous aurez besoin d'un alias ajouté à votre fichier .bashrc, comme ceci:alias gem='ruby -rspa `which gem`'
iconoclast
1
Si vous rencontrez des problèmes de proxy après avoir effectué les étapes de la plupart de ces réponses, essayez de vous assurer d' sudoavoir accès à vos variables d'environnement en ajoutant le -Ecommutateur, par exemple,sudo -E doSomething
kayleeFrye_onDeck

Réponses:

214

Je n'ai pas réussi à faire fonctionner le mien à partir du commutateur de ligne de commande, mais j'ai pu le faire simplement en définissant ma HTTP_PROXYvariable d'environnement. (Notez que le cas semble être important). J'ai un fichier batch qui contient une ligne comme celle-ci:

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

J'ai défini les quatre variables référencées avant d'arriver à cette ligne évidemment. Par exemple, si mon nom d'utilisateur est "wolfbyte", mon mot de passe est "secret" et mon proxy s'appelle "pigsy" et fonctionne sur le port 8080:

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

Vous voudrez peut-être faire attention à la façon dont vous gérez cela, car il stocke votre mot de passe en texte brut dans la session de la machine, mais je ne pense pas que cela devrait être trop problématique.

Mike Minutillo
la source
6
Il semble que 'gem' ne parvienne pas à reconnaître les barres obliques inverses dans la chaîne proxy, que ce soit par http_proxy env var ou --http-proxy. par exemple depuis ma boîte Ubuntu --http-proxy http: // domaine \\ id_utilisateur @ serveur: le port me donne l'erreur: "argument non valide: --http-proxy ..."; Heureusement, mon serveur proxy ne nécessitait pas la spécification de domaine et gem fonctionnait sans.
spoulson
ISA permet à l'administrateur de spécifier un domaine par défaut pour s'authentifier. Vous pouvez essayer d'omettre le domaine et simplement utiliser votre nom d'utilisateur comme le suggère Spoulson. Si votre administrateur ISA a spécifié ledit domaine par défaut et que votre compte d'utilisateur se trouve dans ce domaine, cela devrait fonctionner pour vous (en supposant qu'il n'y a pas de règles de blocage sur le pare-feu)
squillman
11
@spoulson Vous devez encoder l'URI de la barre oblique inversée si vous avez besoin du domaine, par exemple http: // domaine% 5Utilisateur @ serveur: port.
Ian G
13
Pour info, dans Windows, vous pouvez ajouter la ligne set http_proxy à gem.bat afin de ne pas avoir à vous souvenir de définir le proxy à chaque fois.
Ed Manet
1
Soit dit en passant, si votre mot de passe contient des symboles spéciaux, vous devez les encoder en url. Par exemple, remplacer @par %40etc
Andrey Regentov
221

Pour le système d'exploitation Windows, j'ai utilisé Fiddler pour contourner le problème.

  1. Installer / exécuter Fiddler depuis www.fiddler2.com
  2. Run gem:

    $ gem install --http-proxy http://localhost:8888 $gem_name
Peter Moresi
la source
3
A fonctionné un régal, beaucoup plus facile que ntlmaps et cntlm.
atomicules
36
Cela a fonctionné pour moi. Notez que Fiddler n'est pas nécessaire dans toutes les situations. C'est gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_nametout ce qu'il me fallait.
Polaris878
Sous Windows 7, l'indicateur --http-proxy doit aller après le nom de la gemme, par exemple gem install <gemaname> --http-proxy yourproxy.address; port . Sinon, il se plaindra d'un commutateur de ligne de commande non valide.
Alek Davis
Fonctionne sur Windows 10
ggiunta
C'est ce qui a fonctionné pour moi derrière un proxy d'entreprise. Pas besoin de violoneux. Par exemple pour installer jekyll gem il suffit de lancer: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph
129

Cela a totalement fonctionné:

gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name
SethRocker
la source
15
C'est la réponse la plus récente, elle fonctionne également avec Windows. J'ai cependant dû ajouter mon nom d'utilisateur et mon mot de passe: gem install --http-proxy http: // [ utilisateur ]: [ mot de passe ] @ [ serveur ]: [ port ]
vanderwyst
Je n'ai pas pu installer jekyll et j'ai continué à le faire 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). Cela a fonctionné pour moi avecgem install --http-proxy http://127.0.0.1:8580 jekyll
Majid Fouladpour
J'ai ajouté un alias à mon profil bash: alias geminstall='gem install --http-proxy ${http_proxy}'pour me faciliter la vie.
bgStack15
48

J'utilise cntlm ( http://cntlm.sourceforge.net/ ) au travail. La configuration est très similaire à ntlmaps.

Fonctionne très bien et me permet également de connecter ma boîte Ubuntu au proxy ISA.

Consultez http://cntlm.wiki.sourceforge.net/ pour plus d'informations

Jason Navarrete
la source
2
C'est le moyen le moins douloureux de tous les essais. Sur Ubuntu / Debian, je fais apt-get install cntlm, édite la configuration puis exporte http_proxy = " localhost: 3128 ". Travaux!
Konrads
Fonctionne également parfaitement sur les fenêtres. Merci!
Subrat Pattnaik
38

J'ai essayé certaines de ces solutions et aucune n'a fonctionné. J'ai finalement trouvé une solution qui fonctionne pour moi:

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

en utilisant le -pparamètre pour passer le proxy. J'utilise Gem version 1.9.1.

kfox
la source
1
Obtention via l'installation en remplaçant la partie proxy par nom
Gary Tsui
J'ai dû ajouter celui proxy_ipqui est utilisé pour les httpsconnexions afin de fonctionner! Great: D (gem version 2.0.14)
madlymad
18

Créez un fichier .gemrc (dans / etc / gemrc ou ~ / .gemrc ou par exemple avec chef gem dans / opt / chef / embedded / etc / gemrc) contenant:

http_proxy: http://proxy:3128

Ensuite, vous pouvez gem installcomme d'habitude.

lukapiske
la source
Dans le cas où cela fonctionne en utilisant --http-proxymais pas avec un .gemrcfichier, cela peut provenir de la sudoconfiguration. J'ai dû vérifier le /etc/sudoersfichier pour ajouter: Defaults env_keep = "http_proxy ftp_proxy"avant:Defaults env_reset
DependencyHell
16

Cela a parfaitement résolu mon problème:

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

Vous devrez peut-être y ajouter votre nom d'utilisateur et votre mot de passe:

gem install -p http://[username]:[password]@proxy_ip:proxy_port compass
HomTom
la source
11

Si vous rencontrez des problèmes pour vous authentifier via votre proxy, assurez-vous de définir les variables d'environnement exactement au format ci-dessous:

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

La user:password@syntaxe ne semble pas fonctionner et il y a aussi des variables d'environnement mal nommées flottant sur Stack Overflow et divers messages sur le forum.

Sachez également que le téléchargement de vos gemmes peut prendre un certain temps. Au début, je pensais que cela ne fonctionnait pas, mais avec un peu de patience, ils ont commencé à télécharger comme prévu.

Benjamin Wootton
la source
Prendre le conseil de Benjamin Wootton a très bien fonctionné sur mon ordinateur portable Windows 7 connecté au LAN de l'entreprise. Dans la fenêtre de ligne de commande à l'invite DOS, j'ai défini HTTP_PROXY comme http: // localhost: 8888 (ignorer les espaces), puis j'ai utilisé mon nom d'utilisateur et mon mot de passe LAN pour HTTP_PROXY_USER et HTTP_PROXY_PASS respectivement.
raycarr
8

J'ai essayé toutes les solutions ci-dessus, mais aucune d'entre elles n'a fonctionné. Si vous êtes sous linux / macOS, je vous suggère fortement d'utiliser tsocks sur un tunnel ssh. Ce dont vous avez besoin pour que cette configuration fonctionne, c'est une machine sur laquelle vous pouvez vous connecter via ssh, et en plus de cela, un programme appelé tsocks est installé.

L'idée ici est de créer un tunnel dynamique via SSH (un proxy socks5). Nous configurons ensuite tsocks pour utiliser ce tunnel et démarrer nos applications, dans ce cas:

tsocks gem install ...

ou pour tenir compte des rails 3.0:

tsocks bundle install

Un guide plus détaillé se trouve sous:

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

Bien qu'elle ait été écrite pour Ubuntu, la procédure devrait être applicable à toutes les machines basées sur Unix. Une alternative aux tsocks pour Windows est FreeCap ( http://www.freecap.ru/eng/ ). Un client SSH viable sur Windows est appelé mastic.

Christian F
la source
J'ai trouvé l'article dans mes sauvegardes et je l'ai juste republié avec la même URL.
ByScripts
1
L'URL n'est toujours pas disponible. Lorsque vous fournissez un lien vers un site Exchange hors site, non Stack Exchange, résumez les parties saillantes ici et donnez du crédit à ce site. De cette façon, lorsque le lien se brise, la partie importante est toujours là.
The Tin Man
7

Les publications abondent sur ce sujet, et pour aider les autres à gagner des heures à essayer différentes solutions, voici le résultat final de mes heures de bricolage.

Les trois solutions autour d'Internet en ce moment sont: rubysspi apserver cntlm

rubysspi ne fonctionne qu'à partir d'une machine Windows, AFAIK, car elle repose sur la bibliothèque Win32Api. Donc, si vous êtes sur une boîte Windows essayant de passer par un proxy, c'est la solution pour vous. Si vous êtes sur une distribution Linux, vous n'avez pas de chance.

apserver semble être un projet mort. Le lien répertorié dans les articles que j'ai vus mène à la page 404 sur sourceforge. Je recherche "apserver" sur sourceforge ne renvoie rien.

Le lien sourceforge pour cntlm que j'ai vu redirige vers http://cntlm.awk.cz/ , mais qui expire . Une recherche sur sourceforge révèle ce lien, qui fonctionne: http://sourceforge.net/projects/cntlm/

Après avoir téléchargé et configuré cntlm, j'ai réussi à installer une gemme via le proxy, donc cela semble être la meilleure solution pour les distributions Linux.


la source
6

Réponse rapide: Ajouter une configuration proxy avec un paramètre pour l'installation / la mise à jour

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

gem update --http-proxy http://host:port/ package_name
Shantonu
la source
5
Lorsque vous ajoutez une réponse à une question plus ancienne avec des réponses existantes, il est utile d'expliquer ce que votre réponse ajoute de nouveau.
Jason Aller
pour spécifier la commande directement sans détail en lisant tous les détails (réponses rapides)
Shantonu
et, définir la variable d'environnement n'est pas une option pour tout le monde (lorsque vous ne faites qu'une seule mise à jour)
Shantonu
Veuillez ajouter toutes les explications à la réponse elle-même, pas à la section des commentaires
Nico Haase
5

Une solution de contournement consiste à installer http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ sur votre ordinateur local, à le configurer et à exécuter des gemmes via ce proxy.

  • Installation: Téléchargez simplement apserver 097 (et non le 098 expérimental!) Et décompressez.
  • Configurer: modifiez le fichier server.cfg et placez les valeurs de votre proxy MS dans PARENT_PROXYet PARENT_PROXY_PORT. Entrez les valeurs de DOMAIN et USER. Laissez PASSWORD vide (rien après les deux points) - vous serez invité lors du lancement.
  • Exécutez apserver: cd aps097; python main.py
  • Run Gems: gem install—http-proxy http://localhost:5865/ library
Jarin Udom
la source
5
Lisez dans un groupe Google que «apserver» est désormais «NTLM Authorization Server»; dommage que la recherche du premier ne redirige pas vers ce dernier.
Darren Bishop
Salut Jarin, je suis allé sur le lien que vous avez fourni dans votre commentaire et je n'ai pas pu trouver ce téléchargement. Existe-t-il un moyen de le télécharger ailleurs?
Matrich
1
@Matrich selon le commentaire de Darren. apserver est maintenant renommé et trouvé ici: ntlmaps.sourceforge.net
atomicules
4

Je travaille derrière un proxy et viens d'installer SASS en téléchargeant directement depuis http://rubygems.org .

J'ai ensuite couru sudo gem install [path/to/downloaded/gem/file]. Je ne peux pas dire que cela fonctionnera pour tous les joyaux, mais cela peut aider certaines personnes.

Zander
la source
3

Cela a fonctionné pour moi dans une boîte 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

J'ai un fichier batch avec ces lignes que j'utilise pour définir les valeurs d'environnement quand j'en ai besoin.

L'astuce, dans mon cas, c'était les HTTPS_PROXYsets. Sans eux, j'ai toujours eu une erreur d'authentification du proxy 407.

Pedro García Vigil
la source
3

Si vous êtes sur un système * nix, utilisez ceci:

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

puis essayez:

gem install ${gem_name}
Saikrishna Rao
la source
1

Si derrière un proxy, vous pouvez accéder aux téléchargements Ruby , cliquez sur Télécharger, qui téléchargera la mise à jour spécifiée (ou Gem) à l'emplacement souhaité.

Ensuite, via la ligne de commande Ruby, accédez à l'emplacement téléchargé en utilisant: pushd [directory]

par exemple : pushd D:\Setups

puis exécutez la commande suivante: gem install [update name] --local

par exemple: gem install rubygems-update --local.

Testé sur Windows 7 avec la mise à jour Ruby version 2.4.1.

Pour vérifier, utilisez la commande suivante: ruby -v

ArNumb
la source
1

Plutôt que de modifier des fichiers batch (ce que vous devrez peut-être faire pour d'autres gemmes Ruby, par exemple Bundler), il est probablement préférable de le faire une fois et de le faire correctement.

Sous Windows, derrière mon proxy d'entreprise, tout ce que j'avais à faire était d'ajouter la HTTP_PROXYvariable d'environnement à mon système.

  1. Démarrer -> cliquez avec le bouton droit sur Ordinateur -> Propriétés
  2. Choisissez "Paramètres système avancés"
  3. Cliquez sur Avancé -> Variables d'environnement
  4. Créez une nouvelle variable système nommée " HTTP_PROXY" et définissez la valeur sur votre serveur proxy
  5. Redémarrez ou déconnectez-vous et reconnectez-vous

Selon vos besoins d'authentification, la HTTP_PROXYvaleur peut être aussi simple que:

http://proxy-server-name

Ou plus complexe que d'autres l'ont souligné

http://username:password@proxy-server-name:port-number
testworks
la source
0

pour toute personne effectuant un tunneling avec SSH; vous pouvez créer une version de la gemcommande qui utilise le proxy SOCKS:

  1. Installez socksifyavec gem install socksify(vous devrez pouvoir effectuer cette étape sans proxy, au moins)
  2. Copiez votre exe gem existant

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Ouvrez-le dans votre éditeur préféré et ajoutez-le en haut (après le 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. Configurez votre tunnel

    ssh -D 8123 -f -C -q -N user@proxy
  5. Exécutez votre commande gem avec proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Mike Campbell
la source