Làm cách nào để cập nhật Ruby Gems từ phía sau Proxy (ISA-NTLM)


232

Tường lửa tôi đứng sau đang chạy máy chủ Microsoft ISA ở chế độ chỉ NTLM. Hash có ai thành công khi nhận đá quý Ruby của họ để cài đặt / cập nhật thông qua đá quý Ruby SSPI hoặc phương pháp khác không?

... Hay tôi chỉ lười biếng?

Lưu ý: rubysspi-1.2.4 không hoạt động.

Điều này cũng hoạt động cho "igem", một phần của dự án IronRuby


Tôi đã nhận được rubysspi để làm việc, nhưng có rất nhiều vấn đề cần thiết. Nếu bạn muốn sử dụng nó từ trình bao Git Bash, bạn sẽ cần một bí danh được thêm vào tệp .bashrc của mình, chẳng hạn như sau:alias gem='ruby -rspa `which gem`'
iconoclast

1
Nếu bạn gặp sự cố proxy sau khi thực hiện các bước trong hầu hết các câu trả lời này, hãy thử đảm bảo sudocó quyền truy cập vào các biến môi trường của bạn bằng cách thêm công -Etắc, ví dụ:sudo -E doSomething
kayleeFrye_onDeck

Câu trả lời:


214

Tôi không thể làm cho tôi làm việc từ công tắc dòng lệnh nhưng tôi đã có thể làm điều đó chỉ bằng cách đặt HTTP_PROXYbiến môi trường của mình . (Lưu ý rằng trường hợp này có vẻ quan trọng). Tôi có một tệp bó có một dòng như thế này trong đó:

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

Tôi đặt bốn biến được tham chiếu trước khi tôi nhận được dòng này rõ ràng. Ví dụ: nếu tên người dùng của tôi là "wolfbyte", mật khẩu của tôi là "bí mật" và proxy của tôi được gọi là "pigy" và hoạt động trên cổng 8080:

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

Bạn có thể muốn cẩn thận cách bạn quản lý điều đó bởi vì nó lưu mật khẩu của bạn ở dạng văn bản đơn giản trong phiên của máy nhưng tôi không nghĩ rằng nó có quá nhiều vấn đề.


6
Có vẻ như 'gem' không thể nhận ra dấu gạch chéo ngược trong chuỗi proxy, cho dù bằng đối số http_proxy env var hoặc --http-proxy. ví dụ: từ hộp Ubuntu của tôi --http-proxy http: // domain \\ userid @ server: port cho tôi lỗi: "đối số không hợp lệ: --http-proxy ..."; May mắn thay, máy chủ proxy của tôi không yêu cầu đặc tả miền và đá quý hoạt động mà không có nó.
spoulson

ISA cho phép quản trị viên chỉ định một miền mặc định để xác thực. Bạn có thể cố gắng thoát khỏi tên miền và chỉ cần sử dụng tên người dùng của bạn như gợi ý spoulson. Nếu quản trị viên ISA của bạn đã chỉ định miền mặc định đã nói và tài khoản người dùng của bạn nằm trong miền đó, thì điều này sẽ phù hợp với bạn (giả sử không có quy tắc chặn nào trên tường lửa)
squillman

11
@spoulson Bạn cần mã hóa URI dấu gạch chéo ngược nếu bạn cần tên miền, ví dụ: http: // domain% 5Cuserid @ server: port.
Ian G

13
FYI, trong Windows, bạn có thể thêm dòng http_proxy đã đặt vào gem.bat để bạn không phải nhớ đặt proxy mỗi lần.
Ed Manet

1
Nhân tiện, nếu mật khẩu của bạn chứa các ký hiệu đặc biệt, bạn nên urlencode chúng. Ví dụ: thay thế @bằng %40vv
Andrey Regentov

221

Đối với HĐH Windows, tôi đã sử dụng Fiddler để khắc phục sự cố.

  1. Cài đặt / Chạy Fiddler từ www.fiddler2.com
  2. Chạy đá quý:

    $ gem install --http-proxy http://localhost:8888 $gem_name

3
Làm việc một điều trị, dễ dàng hơn nhiều so với ntlmaps và cntlm.
nguyên tử

36
Điều này làm việc cho tôi. Lưu ý rằng Fiddler không cần thiết trong mọi tình huống. Chỉ gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_namelà tất cả những gì cần thiết cho tôi.
Polaris878

Trên Windows 7, cờ --http-proxy phải đi sau tên đá quý, ví dụ: gem install <gemaname> --http-proxy yourproxy.address; port . Nếu không, nó sẽ phàn nàn về một chuyển đổi dòng lệnh không hợp lệ.
Davis

Hoạt động trên Windows 10
ggiunta

Đây là những gì làm việc cho tôi đằng sau một proxy công ty. Không cần fiddler. Ví dụ: để cài đặt đá quý jekyll chỉ cần chạy: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph

129

Điều này hoàn toàn làm việc:

gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name

15
Đây là câu trả lời cập nhật nhất, nó cũng hoạt động với windows. Tôi đã phải thêm tên người dùng và mật khẩu của mình: gem install --http-proxy http: // [ user ]: [ password ] @ [ server ]: [ port ]
vanderwyst 22/12/12

Tôi không thể cài đặt jekyll và tiếp tục nhận được 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). Điều này làm việc với tôi vớigem install --http-proxy http://127.0.0.1:8580 jekyll
Majid fouadpour

Tôi đã thêm một bí danh vào hồ sơ bash của mình: alias geminstall='gem install --http-proxy ${http_proxy}'để làm cho cuộc sống của tôi dễ dàng hơn.
bgStack15

48

Tôi đã sử dụng cntlm ( http://cntlm.sourceforge.net/ ) tại nơi làm việc. Cấu hình rất giống với ntlmaps.

Hoạt động rất tốt và cũng cho phép tôi kết nối hộp Ubuntu của mình với proxy proxy.

Kiểm tra http://cntlm.wiki.sourceforge.net/ để biết thêm thông tin


2
Đây là cách ít đau đớn nhất trong tất cả các cố gắng. Trên Ubuntu / Debian, tôi cài đặt apt-get, chỉnh sửa cấu hình và sau đó xuất http_proxy = " localhost: 3128 ". Làm!
Konrads

Hoạt động hoàn hảo trên các cửa sổ là tốt. Cảm ơn!
Subrat Pattnaik

38

Tôi đã thử một số giải pháp này, và không có giải pháp nào trong số đó có hiệu quả. Cuối cùng tôi đã tìm thấy một giải pháp phù hợp với mình:

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

sử dụng -ptham số để truyền proxy. Tôi đang sử dụng phiên bản Gem 1.9.1.


1
Đã cài đặt thông qua bằng cách thay thế phần proxy thành tên người dùng: password @ proxy_ip: proxyport
Gary Tsui

Tôi đã phải thêm proxy_ipcái được sử dụng cho các httpskết nối để hoạt động! Tuyệt vời: D (phiên bản đá quý
2.0,14

18

Tạo một tệp .gemrc (trong / etc / gemrc hoặc ~ / .gemrc hoặc ví dụ với gem gem trong / opt / Chef / embed / etc / gemrc) có chứa:

http_proxy: http://proxy:3128

Sau đó, bạn có thể gem installnhư bình thường.


Trong trường hợp nó đang hoạt động bằng cách sử dụng --http-proxynhưng không phải với một .gemrctệp, nó có thể đến từ sudocấu hình. Tôi đã phải kiểm tra /etc/sudoerstệp để thêm: Defaults env_keep = "http_proxy ftp_proxy"trước:Defaults env_reset
DependencyHell

16

Điều này đã giải quyết vấn đề của tôi một cách hoàn hảo:

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

Bạn có thể cần thêm tên người dùng và mật khẩu của mình vào đó:

gem install -p http://[username]:[password]@proxy_ip:proxy_port compass

11

Nếu bạn gặp sự cố khi được xác thực thông qua proxy của mình, hãy đảm bảo đặt các biến môi trường theo chính xác định dạng bên dưới:

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

Các user:password@cú pháp dường như không làm việc và có những biến môi trường cũng có một số nặng tên nổi xung quanh trên Stack Overflow và các bài viết diễn đàn khác nhau.

Cũng cần lưu ý rằng có thể mất một lúc để đá quý của bạn bắt đầu tải xuống. Lúc đầu tôi nghĩ nó không hoạt động nhưng với một chút kiên nhẫn họ bắt đầu tải xuống như mong đợi.


Sử dụng mẹo của Benjamin Wootton đã phát huy hiệu quả trên máy tính xách tay Windows 7 của tôi được kết nối với mạng LAN công ty. Trong cửa sổ dòng lệnh tại dấu nhắc DOS, tôi đặt HTTP_PROXY là http: // localhost: 8888 (bỏ qua khoảng trắng) và sau đó sử dụng tên người dùng và Mật khẩu LAN của tôi cho HTTP_PROXY_USER và HTTP_PROXY_PASS.
raycarr

8

Tôi đã thử tất cả các giải pháp trên, tuy nhiên không có giải pháp nào trong số đó có hiệu quả. Nếu bạn đang dùng linux / macOS, tôi khuyên bạn nên sử dụng tsocks qua đường hầm ssh. Những gì bạn cần để thiết lập này hoạt động là một máy mà bạn có thể đăng nhập thông qua ssh và ngoài ra, đó là một chương trình được gọi là tsocks được cài đặt.

Ý tưởng ở đây là tạo một đường hầm động thông qua SSH (proxy vớ5). Sau đó, chúng tôi định cấu hình tsocks để sử dụng đường hầm này và để khởi động các ứng dụng của chúng tôi, trong trường hợp này:

tsocks gem install ...

hoặc vào tài khoản cho đường ray 3.0:

tsocks bundle install

Một hướng dẫn chi tiết hơn có thể được tìm thấy dưới đây:

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

Mặc dù được viết cho Ubuntu, quy trình nên được áp dụng cho tất cả các máy dựa trên Unix. Một thay thế cho tsocks cho Windows là FreeCap ( http://www.freecap.ru/eng/ ). Một máy khách SSH khả thi trên windows được gọi là putty.


Tôi tìm thấy bài viết trong bản sao lưu của mình và chỉ xuất bản lại nó với cùng một URL.
ByScripts

1
URL vẫn không có sẵn. Khi cung cấp một liên kết đến một trang web ngoại hối, không phải là Stack Exchange, hãy tóm tắt các phần nổi bật ở đây và cung cấp tín dụng cho trang web đó. Bằng cách đó, khi liên kết bị phá vỡ, phần quan trọng vẫn còn ở đây.
Tin Man

7

Bài viết rất nhiều về chủ đề này, và để giúp người khác tiết kiệm hàng giờ thử các giải pháp khác nhau, đây là kết quả cuối cùng của giờ tôi mày mò.

Ba giải pháp trên internet tại thời điểm này là: rubysspi apserver cntlm

rubysspi chỉ hoạt động từ máy Windows, AFAIK, vì nó phụ thuộc vào thư viện Win32Api. Vì vậy, nếu bạn đang ở trên một hộp Windows đang cố gắng chạy qua proxy, đây là giải pháp cho bạn. Nếu bạn đang sử dụng bản phân phối Linux, bạn sẽ không gặp may.

apserver dường như là một dự án chết. Liên kết được liệt kê trong các bài đăng tôi đã thấy dẫn đến trang 404 trên sourceforge. Tôi tìm kiếm "apserver" trên sourceforge không trả về gì cả.

Liên kết sourceforge cho cntlm mà tôi đã thấy chuyển hướng đến http://cntlm.awk.cz/ , nhưng đã hết thời gian. Một tìm kiếm trên sourceforge bật lên liên kết này, hoạt động: http://sourceforge.net/projects/cntlm/

Sau khi tải xuống và định cấu hình cntlm, tôi đã quản lý để cài đặt một viên ngọc thông qua proxy, vì vậy đây có vẻ là giải pháp tốt nhất cho các bản phân phối Linux.


6

Trả lời nhanh: Thêm cấu hình proxy với tham số cho cả cài đặt / cập nhật

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

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

5
Khi thêm một câu trả lời cho một câu hỏi cũ hơn với các câu trả lời hiện có, thật hữu ích để giải thích những gì câu trả lời của bạn thêm mới.
Jason Aller

để chỉ định lệnh trực tiếp mà không cần đọc chi tiết tất cả các chi tiết (câu trả lời nhanh)
Chaionu

và, cài đặt biến môi trường không phải là một tùy chọn cho tất cả mọi người (khi bạn chỉ cập nhật một lần)
Chaionu

Vui lòng thêm tất cả lời giải thích cho câu trả lời, không phải vào phần bình luận
Nico Haase

5

Một cách giải quyết khác là cài đặt http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ trên máy cục bộ của bạn, định cấu hình và chạy đá quý thông qua proxy này.

  • Cài đặt: Chỉ cần tải xuống apserver 097 (chứ không phải 098 thử nghiệm!) Và giải nén.
  • Cấu hình: Chỉnh sửa tệp server.cfg và đặt các giá trị cho proxy MS của bạn vào PARENT_PROXYPARENT_PROXY_PORT. Nhập các giá trị cho DOMAIN và USER. Để trống PASSWORD (không có gì sau dấu hai chấm) - bạn sẽ được nhắc khi khởi chạy nó.
  • Chạy apserver: cd aps097; python main.py
  • Chạy đá quý: gem install—http-proxy http://localhost:5865/ library

5
Đọc trong một nhóm google rằng 'apserver' hiện là 'Máy chủ ủy quyền NTLM'; xấu hổ vì tìm kiếm cái trước không chuyển hướng đến cái sau.
Giám mục Darren

Xin chào Jarin, tôi đã đi đến liên kết bạn cung cấp trong nhận xét của bạn và không thể tìm thấy tải xuống đó. Có cách nào tôi có thể tải nó từ bất cứ nơi nào khác không?
Matrich

1
@Matrich theo nhận xét của Darren. apserver hiện được đổi tên và tìm thấy ở đây: ntlmaps.sourceforge.net
nguyên tử

4

Tôi đang làm việc đằng sau một proxy và chỉ cần cài đặt SASS bằng cách tải trực tiếp từ http://rubygems.org .

Sau đó tôi chạy sudo gem install [path/to/downloaded/gem/file]. Tôi không thể nói điều này sẽ làm việc cho tất cả các đá quý, nhưng nó có thể giúp một số người.


3

Điều này làm việc cho tôi trong một hộp 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

Tôi có một tệp bó với các dòng này mà tôi sử dụng để đặt giá trị môi trường khi tôi cần.

Thủ thuật, trong trường hợp của tôi, là HTTPS_PROXYbộ. Không có chúng, tôi luôn gặp lỗi xác thực proxy.


3

Nếu bạn đang sử dụng hệ thống * nix, hãy sử dụng:

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

và sau đó thử:

gem install ${gem_name}



1

Nếu đằng sau một proxy, bạn có thể điều hướng đến các bản tải xuống của Ruby , nhấp vào Tải xuống, phần này sẽ tải xuống bản cập nhật được chỉ định (hoặc Gem) đến một vị trí mong muốn.

Tiếp theo, thông qua dòng lệnh Ruby, điều hướng đến vị trí đã tải xuống bằng cách sử dụng: pushd [directory]

ví dụ : pushd D:\Setups

sau đó chạy lệnh sau: gem install [update name] --local

ví dụ : gem install rubygems-update --local.

Đã thử nghiệm trên Windows 7 với phiên bản cập nhật Ruby 2.4.1.

Để kiểm tra sử dụng lệnh sau: ruby -v


1

Thay vì chỉnh sửa các tệp bó (mà bạn có thể phải thực hiện đối với các loại đá quý khác của Ruby, ví dụ Bundler), có lẽ tốt hơn là làm điều này một lần và thực hiện đúng cách.

Trên Windows, đằng sau proxy công ty của tôi, tất cả những gì tôi phải làm là thêm HTTP_PROXYbiến môi trường vào hệ thống của mình.

  1. Bắt đầu -> nhấp chuột phải vào Máy tính -> Thuộc tính
  2. Chọn "Cài đặt hệ thống nâng cao"
  3. Nhấp vào Nâng cao -> Biến môi trường
  4. Tạo một biến hệ thống mới có tên " HTTP_PROXY" và đặt Giá trị cho máy chủ proxy của bạn
  5. Khởi động lại hoặc đăng xuất và đăng nhập lại

Tùy thuộc vào yêu cầu xác thực của bạn, HTTP_PROXYgiá trị có thể đơn giản như:

http://proxy-server-name

Hoặc phức tạp hơn như những người khác đã chỉ ra

http://username:password@proxy-server-name:port-number

0

cho bất cứ ai đào hầm bằng SSH; bạn có thể tạo một phiên bản của gemlệnh sử dụng proxy SOCKS:

  1. Cài đặt socksifyvới gem install socksify(ít nhất bạn sẽ cần có thể thực hiện bước này mà không cần proxy)
  2. Sao chép exe đá quý hiện có của bạn

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Mở nó trong trình chỉnh sửa yêu thích của bạn và thêm phần này ở trên cùng (sau 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. Thiết lập đường hầm của bạn

    ssh -D 8123 -f -C -q -N user@proxy
  5. Chạy lệnh gem của bạn với proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.