Как обновить Ruby Gems из-за прокси (ISA-NTLM)

232

Брандмауэр, за которым я работаю, работает на сервере Microsoft ISA в режиме только NTLM. У кого-нибудь есть успехи в получении / установке своих драгоценных камней Ruby для установки / обновления через Ruby SSPI gem или другим способом?

... или я просто ленивый?

Примечание: rubysspi-1.2.4 не работает.

Это также работает для "Igem", часть проекта IronRuby

Бретт Веенстра
источник
Я получил rubysspi на работу, но там нужно много играть. Если вы хотите использовать его из оболочки Git Bash, вам понадобится псевдоним, добавленный в ваш файл .bashrc, например, так:alias gem='ruby -rspa `which gem`'
iconoclast
1
Если у вас возникли проблемы с прокси-сервером после выполнения действий , sudo-Esudo -E doSomething
описанных

Ответы:

214

Я не смог заставить мой работать с помощью переключателя командной строки, но я смог сделать это, просто установив HTTP_PROXYпеременную окружения. (Обратите внимание, что дело кажется важным). У меня есть командный файл, в котором есть такая строка:

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

Я установил четыре переменные, на которые ссылаются, прежде чем я доберусь до этой строки, очевидно. Например, если мое имя пользователя «wolfbyte», мой пароль «secret», а мой прокси-сервер называется «pigsy» и работает через порт 8080:

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

Возможно, вы захотите быть осторожным, как вы управляете этим, потому что он хранит ваш пароль в виде простого текста в сеансе машины, но я не думаю, что это должно быть слишком большой проблемой.

Майк Минутилло
источник
6
Кажется, что 'gem' не может распознать обратную косую черту в строке прокси, будь то по аргументу http_proxy env var или --http-proxy. например, из моего окна Ubuntu --http-proxy http: // domain \\ userid @ server: port выдает мне ошибку: "неверный аргумент: --http-proxy ..."; К счастью, мой прокси-сервер не требовал спецификации домена, а гем работал без него.
Спулсон
ISA позволяет администратору указать домен по умолчанию для аутентификации. Вы можете попытаться оставить домен и просто использовать свое имя пользователя, как подсказывает spoulson. Если ваш ISA-администратор указал указанный домен по умолчанию, а учетная запись пользователя находится в этом домене, это должно сработать для вас (при условии, что на брандмауэре нет правил блокировки)
squillman
11
@spoulson Вам нужен URI для кодирования обратной косой черты, если вам нужен домен, например http: // domain% 5Cuserid @ server: port.
Ян Г
13
Кстати, в Windows вы можете добавить строку set http_proxy в gem.bat, чтобы вам не приходилось каждый раз устанавливать прокси.
Эд Мане
1
Кстати, если ваш пароль содержит специальные символы, вы должны их кодировать. Например, заменить @на и %40т. Д.
Андрей Регентов
221

Для ОС Windows я использовал Fiddler для решения этой проблемы.

  1. Установить / запустить Fiddler с www.fiddler2.com
  2. Запустите драгоценный камень:

    $ gem install --http-proxy http://localhost:8888 $gem_name
Питер Мореси
источник
3
Работал угощение, намного проще чем ntlmaps и cntlm.
atomicules
36
Это сработало для меня. Обратите внимание, что Fiddler не нужен во всех ситуациях. Просто gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_nameэто все, что было нужно для меня.
Polaris878
В Windows 7 флаг --http-proxy должен идти после имени гема, например, gem install <gemaname> --http-proxy yourproxy.address; порт . В противном случае он будет жаловаться на неверный параметр командной строки.
Алек Дэвис,
Работает на Windows 10
ggiunta
Это то, что работало для меня за корпоративным прокси. Скрипач не нужен. Например, чтобы установить jekyll gem, просто запустите: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Джозеф
129

Это полностью сработало:

gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name
SethRocker
источник
15
Это самый актуальный ответ, он работает и с Windows. Мне пришлось добавить свое имя пользователя и пароль, хотя: gem install --http-proxy http: // [ пользователь ]: [ пароль ] @ [ сервер ]: [ порт ]
vanderwyst
Я не мог установить Джекилл и продолжал получать 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). Это сработало для меняgem install --http-proxy http://127.0.0.1:8580 jekyll
Маджид Фуладпур
Я добавил псевдоним в свой профиль bash: alias geminstall='gem install --http-proxy ${http_proxy}'чтобы сделать мою жизнь проще.
bgStack15
48

Я использую cntlm ( http://cntlm.sourceforge.net/ ) на работе. Конфигурация очень похожа на ntlmaps.

Прекрасно работает, а также позволяет мне подключить мой Ubuntu box к прокси ISA.

Проверьте http://cntlm.wiki.sourceforge.net/ для получения дополнительной информации

Джейсон Наваррете
источник
2
Это наименее болезненный способ из всех опробованных. В Ubuntu / Debian я делаю apt-get install cntlm, редактирую config и затем экспортирую http_proxy = " localhost: 3128 ". Работает!
Конрад
Отлично работает на окнах. Спасибо!
Субрат Паттнаик
38

Я попробовал некоторые из этих решений, и ни одно из них не сработало. Я наконец нашел решение, которое работает для меня:

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

используя -pпараметр для передачи прокси. Я использую Gem версии 1.9.1.

kfox
источник
1
Получил установку, заменив прокси-часть на имя пользователя: пароль @ proxy_ip: proxyport
Гари Цуй
Я должен был добавить, proxy_ipчто используется для httpsсоединений, чтобы работать! Отлично: D (версия для драгоценностей 2.0.14)
madlymad
18

Создайте файл .gemrc (либо в / etc / gemrc или ~ / .gemrc, либо, например, с chef gem в / opt / chef / embedded / etc / gemrc), содержащий:

http_proxy: http://proxy:3128

Тогда вы можете gem installкак обычно.

lukapiske
источник
Если он работает, --http-proxyно не с .gemrcфайлом, это может произойти из sudoконфигурации. Я должен был проверить /etc/sudoersфайл, чтобы добавить: Defaults env_keep = "http_proxy ftp_proxy"before:Defaults env_reset
DependencyHell
16

Это решило мою проблему отлично:

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

Вам может понадобиться добавить ваше имя пользователя и пароль к нему:

gem install -p http://[username]:[password]@proxy_ip:proxy_port compass
HomTom
источник
11

Если у вас возникают проблемы с аутентификацией через прокси-сервер, убедитесь, что переменные среды установлены точно в следующем формате:

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

user:password@Синтаксис , кажется , не работать , и есть также некоторые плохо именованные переменные окружения , плавающие вокруг на переполнение стека и различных сообщений на форуме.

Также имейте в виду, что загрузка ваших драгоценных камней может занять некоторое время. Сначала я думал, что это не работает, но с небольшим терпением они начали скачивать, как и ожидалось.

Бенджамин Вуттон
источник
Принятие подсказки Бенджамина Вуттона отлично сработало на моем ноутбуке с Windows 7, подключенном к корпоративной локальной сети. В окне командной строки в командной строке DOS я установил HTTP_PROXY как http: // localhost: 8888 (игнорируйте пробелы), а затем использовал свое имя пользователя и пароль в локальной сети для HTTP_PROXY_USER и HTTP_PROXY_PASS соответственно.
Raycarr
8

Я перепробовал все вышеперечисленные решения, однако ни одно из них не сработало. Если вы используете Linux / MacOS, я настоятельно рекомендую использовать tsocks через ssh-туннель. Для того, чтобы эта настройка работала, вам нужен компьютер, на котором вы можете войти через ssh, и в дополнение к этому установлена ​​программа под названием tsocks.

Идея в том, чтобы создать динамический туннель через SSH (прокси socks5). Затем мы настраиваем tsocks для использования этого туннеля и запуска наших приложений, в этом случае:

tsocks gem install ...

или для учета рельсов 3.0:

tsocks bundle install

Более подробное руководство можно найти под:

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

Несмотря на то, что она написана для Ubuntu, процедура должна быть применима для всех машин на основе Unix. Альтернативой tsocks для Windows является FreeCap ( http://www.freecap.ru/eng/ ). Жизнеспособный клиент SSH на окнах называется замазкой.

Кристиан Ф
источник
Я нашел эту статью в своих резервных копиях и переиздал ее с тем же URL.
ByScripts
1
URL все еще недоступен. Предоставляя ссылку на сторонний сайт, не являющийся веб-сайтом Exchange, суммируйте основные части здесь и отдайте должное этому сайту. Таким образом, когда ссылка разрывается, важная часть все еще здесь.
Жестянщик
7

Сообщений об этой теме предостаточно, и чтобы помочь другим сэкономить часы, пытаясь найти разные решения, вот окончательный результат моих часов работы.

На данный момент существует три решения в Интернете: rubysspi apserver cntlm

rubysspi работает только с Windows-машины AFAIK, так как использует библиотеку Win32Api. Так что, если вы работаете в Windows, пытаясь запустить прокси-сервер, это решение для вас. Если вы находитесь в дистрибутиве Linux, вам не повезло.

apserver кажется мертвым проектом. Ссылка, указанная в сообщениях, которые я видел, ведет на страницу 404 на sourceforge. Я ищу "apserver" на sourceforge ничего не возвращает.

Ссылка на sourceforge для cntlm, которую я видел, перенаправляет на http://cntlm.awk.cz/ , но время ожидания истекло. Поиск по sourceforge обнаруживает эту ссылку, которая работает: http://sourceforge.net/projects/cntlm/

После загрузки и настройки cntlm мне удалось установить гем через прокси, так что это, похоже, лучшее решение для дистрибутивов Linux.


источник
6

Быстрый ответ: добавьте конфигурацию прокси с параметром для установки / обновления

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

gem update --http-proxy http://host:port/ package_name
Shantonu
источник
5
При добавлении ответа на старый вопрос с существующими ответами полезно объяснить, что добавляет ваш ответ, что является новым.
Джейсон Аллер
указывать команду напрямую, без подробностей, читая все подробности (быстрые ответы)
Шантону
и, установка переменной среды не является
подходящей
Пожалуйста, добавьте все объяснения к самому ответу, а не к разделу комментариев
Нико
5

Обходной путь - установить http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ на свой локальный компьютер, настроить его и запустить гем через этот прокси.

  • Установка: Просто скачайте apserver 097 (а не экспериментальный 098!) И распакуйте.
  • Конфигурирование: отредактируйте файл server.cfg и поместите значения для вашего прокси-сервера MS в PARENT_PROXYи PARENT_PROXY_PORT. Введите значения для ДОМЕНА и ПОЛЬЗОВАТЕЛЯ. Оставьте ПАРОЛЬ пустым (ничего после двоеточия) - вам будет предложено запустить его.
  • Запустите apserver: cd aps097; python main.py
  • Run Gems: gem install—http-proxy http://localhost:5865/ library
Ярин Удом
источник
5
Прочитайте в группе Google, что «apserver» теперь «NTLM Authorization Server»; позор, что поиск первого не перенаправляет к этому последнему.
Даррен Бишоп
Привет, Джарин, я пошел по ссылке, которую ты указал в своем комментарии, и не смог найти эту загрузку. Можно ли как-нибудь скачать его из другого места?
Матрич
1
@ Матрич согласно комментарию Даррена. apserver теперь переименован и найден здесь: ntlmaps.sourceforge.net
atomicules
4

Я работаю за прокси и только что установил SASS, скачав прямо с http://rubygems.org .

Я тогда побежал sudo gem install [path/to/downloaded/gem/file]. Я не могу сказать, что это будет работать для всех драгоценных камней, но это может помочь некоторым людям.

судак
источник
3

Это работало для меня в коробке 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

У меня есть командный файл с этими строками, который я использую для установки значений среды, когда мне это нужно.

Уловка, в моем случае, была HTTPS_PROXY . Без них я всегда получал ошибку аутентификации прокси 407.

Педро Гарсия Бдение
источник
3

Если вы работаете в системе * nix, используйте это:

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

а затем попробуйте:

gem install ${gem_name}
Сайкришна Рао
источник
1

Если за прокси-сервером вы можете перейти к загрузкам Ruby , нажмите «Загрузить», чтобы загрузить указанное обновление (или Gem) в нужное место.

Затем с помощью командной строки Ruby перейдите к загруженному местоположению, используя: pushd [directory]

например: pushd D:\Setups

затем выполните следующую команду: gem install [update name] --local

например: gem install rubygems-update --local .

Протестировано на Windows 7 с обновлением Ruby версии 2.4.1.

Для проверки используйте следующую команду: ruby -v

ArNumb
источник
1

Вместо того, чтобы редактировать командные файлы (что вам, возможно, придется сделать для других гемов Ruby, например, Bundler), вероятно, лучше сделать это один раз и сделать это правильно.

В Windows за корпоративным прокси все, что мне нужно было сделать, это добавить HTTP_PROXYпеременную окружения в мою систему.

  1. Пуск -> щелкните правой кнопкой мыши Компьютер -> Свойства
  2. Выберите «Расширенные настройки системы»
  3. Нажмите Дополнительно -> Переменные среды
  4. Создайте новую системную переменную с именем " HTTP_PROXY" и установите значение для вашего прокси-сервера.
  5. Перезагрузитесь или выйдите и снова войдите

В зависимости от ваших требований к аутентификации HTTP_PROXYзначение может быть таким простым:

http://proxy-server-name

Или более сложный, как указали другие

http://username:password@proxy-server-name:port-number
TestWorks
источник
0

для любого туннеля с SSH; Вы можете создать версию gemкоманды, которая использует прокси SOCKS:

  1. Установите socksifyс помощью gem install socksify(по крайней мере, вам нужно будет выполнить этот шаг без прокси)
  2. Скопируйте ваш существующий самоцвет

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Откройте его в вашем любимом редакторе и добавьте его вверху (после Шебанга)

    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. Настройте свой туннель

    ssh -D 8123 -f -C -q -N user@proxy
  5. Запустите команду gem с proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Майк Кэмпбелл
источник