Как обновить 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

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.


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как обычно.


Если он работает, --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

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

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


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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.