Як оновити Ruby Gems з-за проксі (ISA-NTLM)


232

Брандмауер, за яким я позаду, працює з сервером Microsoft ISA в режимі NTLM. Хтось має успіх у встановленні / оновленні дорогоцінних каменів Ruby через дорогоцінний камінь Ruby SSPI чи іншим методом?

... чи я просто лінуюся?

Примітка: rubysspi-1.2.4 не працює.

Це також працює для "igem", що є частиною проекту IronRuby


Я змусив працювати рубісспі, але потрібно багато хитрощів. Якщо ви хочете використовувати його з оболонки Git Bash, вам знадобиться псевдонім, доданий у ваш .bashrc файл, такий як цей:alias gem='ruby -rspa `which gem`'
iconoclast

1
Якщо у вас виникли проблеми з проксі-сервісом після виконання дій у більшості цих відповідей, спробуйте переконатися, що sudoмає доступ до змінних вашого середовища, додавши -Eперемикач, наприклад,sudo -E doSomething
kayleeFrye_onDeck

Відповіді:


214

Мені не вдалося змусити мене працювати з комутатора командного рядка, але мені вдалося це зробити, просто встановивши HTTP_PROXYмінливу середовища. (Зверніть увагу, що випадок здається важливим). У мене є пакетний файл із таким рядком:

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

Я встановив чотири згадані змінні, перш ніж явно дійти до цього рядка. Як приклад, якщо моє ім’я користувача "wolfbyte", мій пароль - "секретний", а мій проксі називається "piggy" і працює на порту 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 ..."; На щастя, мій проксі-сервер не вимагав специфікації домену, і дорогоцінний камінь працював без нього.
Spoulson

ISA дозволяє адміністратору вказати домен за замовчуванням для аутентифікації проти. Ви можете спробувати виключити домен і просто використовувати своє ім’я користувача, як пропонує Spoulson. Якщо ваш адміністратор ISA вказав вказаний домен за замовчуванням, а ваш обліковий запис використовується в цьому домені, це повинно працювати для вас (припустимо, що на брандмауері немає правил щодо блокування)
squillman

11
@spoulson Вам потрібно URI кодувати зворотну косу рису, якщо вам потрібен домен, наприклад http: // domain% 5Cuserid @ server: port.
Ян G

13
FYI, в Windows, ви можете додати встановлену 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; port . В іншому випадку він скаржиться на недійсний комутатор командного рядка.
Alek Davis

Працює під Windows 10
ggiunta

Це те, що працювало на мене за корпоративним проксі. Не потрібен жоден фіддер. Наприклад, щоб встановити дорогоцінний камінь jekyll, просто запустіть: 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

Я не міг встановити jekyll і продовжував діставати 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
Маджід Фуладпур

Я додав псевдонім до свого баш-профілю: alias geminstall='gem install --http-proxy ${http_proxy}'щоб полегшити своє життя.
bgStack15

48

Я використовував cntlm ( http://cntlm.sourceforge.net/ ) на роботі. Конфігурація дуже схожа на ntlmaps.

Відмінно працює, а також дозволяє мені підключити свою скриньку Ubuntu до проксі ISA.

Перегляньте http://cntlm.wiki.sourceforge.net/ для отримання додаткової інформації


2
Це найменш болісний спосіб з усіх випробуваних. У Ubuntu / Debian я apt-get install cntlm, редагую конфігурацію та експортую http_proxy = " localhost: 3128 ". Працює!
Конрадс

Також чудово працює на вікнах. Дякую!
Субрат Паттайк

38

Я спробував деякі з цих рішень, і жодне з них не спрацювало. Нарешті я знайшов рішення, яке працює для мене:

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

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


1
Через встановлення проксі-частини на ім'я користувача: пароль @ proxy_ip: proxyport
Gary Tsui

Мені довелося додати те, 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"раніше: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

The user:password@Синтаксис , здається , НЕ працювати , і є також деякі погано іменовані змінні оточення , плаваючі навколо на переповнення стека і різних повідомлень на форумі.

Також пам’ятайте, що завантаження ваших дорогоцінних каменів може зайняти деякий час. Спочатку я подумав, що це не працює, але з трохи терпіння вони почали завантажувати, як очікувалося.


Підказки Бенджаміна Вуттона чудово спрацювали на моєму ноутбуці Windows 7, підключеному до корпоративної локальної мережі. У вікні командного рядка у вікні DOS я встановив HTTP_PROXY як http: // localhost: 8888 (ігноруйте пробіли), а потім використав моє ім’я користувача LAN та пароль для HTTP_PROXY_USER та HTTP_PROXY_PASS відповідно.
raycarr

8

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

Ідея тут полягає у створенні динамічного тунелю через SSH (proxy 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 на Windows називається шпаклівкою.


Я знайшов статтю в своїх резервних копіях і просто перевидав її з тією ж URL-адресою.
ByScripts

1
URL-адреса все ще недоступна. Надаючи посилання на веб-сайт, який не є стек-біржовим сайтом, підсумуйте тут важливі частини та надайте кредит цьому сайту. Таким чином, коли ланка розривається, важлива частина все ще тут.
Бляшаний чоловік

7

Дописів, що стосуються цієї теми, і щоб допомогти іншим заощадити години на тестування різних рішень, ось остаточний результат моїх годин майстерності.

Наразі три рішення навколо Інтернету: rubysspi apserver cntlm

rubysspi працює лише з машини Windows, AFAIK, оскільки він покладається на бібліотеку Win32Api. Отже, якщо ви знаходитесь у вікні Windows, який намагається запустити проксі, це рішення для вас. Якщо ви перебуваєте в дистрибутиві Linux, вам не пощастить.

здається, що апсервер є мертвим проектом. Посилання, перелічене в публікаціях, які я бачив, призводить до 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
Коли ви додаєте відповідь на старе питання з існуючими відповідями, корисно пояснити, що ваша відповідь додає, що є новою.
Джейсон Аллер

вказати команду безпосередньо без деталізації читання всіх деталей (швидкі відповіді)
Шантону

і встановлення змінної середовища не є можливим для всіх (коли ви робите лише один раз оновлення)
Shantonu

Будь ласка, додайте всі пояснення до самої відповіді, а не до розділу коментарів
Ніко Хааз,

5

Вирішення проблеми полягає в тому, щоб встановити http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ на локальній машині, налаштувати її та запустити дорогоцінні камені через цей проксі.

  • Встановити: просто завантажте додаток 097 (а не експериментальний 098!) Та розпакуйте.
  • Налаштування: Відредагуйте файл server.cfg і введіть значення для вашого проксі MS у PARENT_PROXYта PARENT_PROXY_PORT. Введіть значення для домену DOMAIN та USER. Залиште PASSWORD порожнім (нічого після двокрапки) - вам буде запропоновано при запуску.
  • Виконати апсервер: cd aps097; python main.py
  • Запустити дорогоцінні камені: gem install—http-proxy http://localhost:5865/ library

5
Прочитайте в групі google, що "apserver" зараз "Сервер авторизації NTLM"; прикро, що пошук перших не перенаправляє на останнє.
Даррен Єпископ

Привіт Ярін, я перейшов до посилання, яке ви вказали у своєму коментарі, і не зміг знайти це завантаження. Чи є якийсь спосіб завантажити його з будь-якого місця?
Матріх

1
@Matrich відповідно до коментаря Даррена. 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. Скопіюйте наявний дорогоцінний камінь EXE

    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.