Як оновити 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.