프록시 뒤에서 Ruby Gems를 업데이트하는 방법 (ISA-NTLM)


232

내가 가지고있는 방화벽은 NTLM 전용 모드에서 Microsoft ISA 서버를 실행하고 있습니다. 누구든지 Ruby SSPI gem 또는 다른 방법을 통해 Ruby gem을 설치 / 업데이트하는 데 성공 했습니까?

... 아니면 게으른가요?

참고 : rubysspi-1.2.4는 작동하지 않습니다.

IronRuby 프로젝트의 일부인 "igem"에서도 작동합니다.


루비 스피를 작동 시켰지만 많은 조정이 필요합니다. 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%

이 줄에 분명히 도달하기 전에 4 개의 참조 변수를 설정했습니다. 예를 들어 사용자 이름이 "wolfbyte"인 경우 암호는 "secret"이고 프록시는 "pigsy"이며 포트 8080에서 작동합니다.

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

컴퓨터 세션에서 암호를 일반 텍스트로 저장하기 때문에 관리 방법에주의를 기울여야하지만 너무 문제가되지는 않습니다.


6
'gem'이 http_proxy env var 또는 --http-proxy 인수에 의해 프록시 문자열에서 백 슬래시를 인식하지 못하는 것 같습니다. 예를 들어 내 우분투 상자에서 --http-proxy http : // domain \\ userid @ server : port 오류가 발생합니다 : "잘못된 인수 : --http-proxy ..."; 다행히도 프록시 서버에는 도메인 사양이 필요하지 않았으며 보석이 없으면 작동했습니다.
spoulson

ISA를 통해 관리자는 인증 할 기본 도메인을 지정할 수 있습니다. 도메인을 제외하고 spoulson이 제안한 것처럼 사용자 이름을 사용할 수 있습니다. ISA 관리자가 기본 도메인을 지정하고 사용자 계정이 해당 도메인에있는 경우 방화벽에 차단 규칙이 없다고 가정하면이 방법이
효과적입니다.

11
@spoulson 도메인이 필요한 경우 백 슬래시를 URI 인코딩해야합니다 (예 : http : // domain % 5Cuserid @ server : port).
Ian G

13
참고로, Windows에서는 set http_proxy 줄을 gem.bat에 추가하여 매번 프록시를 설정할 필요가 없습니다.
Ed Manet

1
그건 그렇고, 암호에 특수 기호가 포함되어 있으면 urlencode해야합니다. 예 교체 @%40
안드레이 Regentov에게

221

Windows OS의 경우 Fiddler를 사용하여 문제를 해결했습니다.

  1. www.fiddler2.com에서 Fiddler 설치 / 실행
  2. 보석을 실행 :

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

3
ntlmaps 및 cntlm보다 훨씬 쉬운 치료법을 사용했습니다.
atomules

36
이것은 나를 위해 일했습니다. 모든 상황에서 Fiddler가 필요하지는 않습니다. 그냥 gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name나를 위해 필요했던 모든입니다.
Polaris878

Windows 7에서 --http-proxy 플래그는 gem 이름 다음에 와야합니다 (예 : gem install <gemaname> --http-proxy yourproxy.address; port) . 그렇지 않으면 유효하지 않은 명령 행 스위치에 대해 불평합니다.
Alek Davis

Windows 10에서 작동
ggiunta

이것이 회사 프록시 뒤에 저에게 효과적이었습니다. 피들러가 필요 없습니다. 예를 들어 jekyll gem을 설치하려면 다음을 실행하십시오. sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph

129

이것은 완전히 작동했습니다.

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

15
이것은 가장 최신 답변이며 Windows에서도 작동합니다. gem install --http-proxy http : // [ user ] : [ password ] @ [ server ] : [ port ]
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
Majid Fouladpour

내 bash 프로필에 별칭을 추가했습니다 alias geminstall='gem install --http-proxy ${http_proxy}'.
bgStack15

48

나는 직장에서 cntlm ( http://cntlm.sourceforge.net/ )을 사용하고 있습니다. 구성은 ntlmap과 매우 유사합니다.

잘 작동하며 Ubuntu 상자를 ISA 프록시에 연결할 수도 있습니다.

자세한 내용은 http://cntlm.wiki.sourceforge.net/ 을 확인 하십시오.


2
이것은 모든 시도 중 가장 고통스러운 방법입니다. 우분투 / 데비안에서는 apt-get install cntlm을 수행하고 구성을 편집 한 다음 http_proxy = " localhost : 3128 " 을 내 보냅니다 . 공장!
Konrads

창문에서도 완벽하게 작동합니다. 감사!
Subrat Pattnaik

38

나는이 해결책 중 일부를 시도했지만 그중 아무것도 효과가 없었습니다. 마침내 나에게 맞는 솔루션을 찾았습니다.

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

-p매개 변수를 사용하여 프록시를 전달합니다. Gem 버전 1.9.1을 사용하고 있습니다.


1
에 프록시 부분을 대체하여 설치를 통해있어 사용자 이름 : 암호 @ proxy_ip : 프락시 포트
게리 추이

작동하기 proxy_ip위해 https연결에 사용되는 것을 추가 해야했습니다! Great : D (gem version 2.0.14)
madlymad

18

다음을 포함하는 .gemrc 파일 (/ etc / gemrc 또는 ~ / .gemrc 또는 예를 들어 / opt / chef / embedded / etc / gemrc에 chef gem을 사용하여)을 작성하십시오.

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

user:password@구문은 작동하지 않고 스택 오버플로 다양한 포럼 게시물에 주위에 떠있는 일부 심하게라는 이름의 환경 변수가 있습니다.

또한 보석이 다운로드되기까지 시간이 걸릴 수 있습니다. 처음에는 작동하지 않는다고 생각했지만 약간의 인내심으로 예상대로 다운로드를 시작했습니다.


Benjamin Wootton의 팁은 회사 LAN에 연결된 Windows 7 랩톱에서 잘 작동했습니다. DOS 프롬프트의 명령 행 창에서 HTTP_PROXY를 http : // localhost : 8888 (공백 무시)로 설정 한 다음 각각 LAN_ 사용자 이름 및 비밀번호를 각각 HTTP_PROXY_USER 및 HTTP_PROXY_PASS에 사용했습니다.
raycarr

8

위의 모든 솔루션을 시도했지만 그중 아무것도 작동하지 않았습니다. Linux / macOS를 사용하는 경우 ssh 터널에서 tsock을 사용하는 것이 좋습니다. 이 설정을 작동시키기 위해 필요한 것은 ssh를 통해 로그인 할 수 있고 tsocks라는 프로그램이 설치된 시스템입니다.

여기서 아이디어는 SSH (socks5 프록시)를 통해 동적 터널을 만드는 것입니다. 그런 다음이 터널을 사용하고이 경우 응용 프로그램을 시작하도록 tsock을 구성합니다.

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 기반 컴퓨터에 적용 할 수 있어야합니다. Windows 용 tsock에 대한 대안은 FreeCap ( http://www.freecap.ru/eng/ )입니다. Windows에서 실행 가능한 SSH 클라이언트를 퍼티라고합니다.


백업에서 기사를 찾은 후 동일한 URL로 다시 게시했습니다.
ByScripts

1
URL을 계속 사용할 수 없습니다. 비 스택 교환 사이트 이외의 사이트에 대한 링크를 제공 할 때 여기에 중요한 부분을 요약하고 해당 사이트에 기여하십시오. 이렇게하면 링크가 끊어 질 때 중요한 부분이 여전히 남아 있습니다.
Tin Man

7

이 주제에 관한 게시물이 많으며 다른 사람들이 다른 솔루션을 시도하는 데 드는 시간을 절약 할 수 있도록 다음은 내 시간의 땜질 결과입니다.

현재 인터넷 주위의 세 가지 솔루션은 다음과 같습니다. rubysspi apserver cntlm

rubysspi는 Win32Api 라이브러리에 의존하기 때문에 Windows 시스템 AFAIK에서만 작동합니다. 따라서 프록시를 통해 실행하려는 Windows 상자에있는 경우 이것이 솔루션입니다. Linux 배포판을 사용하는 경우 운이 좋지 않습니다.

apserver는 죽은 프로젝트 인 것 같습니다. 내가 본 게시물에 나열된 링크는 sourceforge의 404 페이지로 연결됩니다. sourceforge에서 "apserver"를 검색하면 아무것도 반환되지 않습니다.

내가 본 cntlm의 sourceforge 링크는 http://cntlm.awk.cz/로 리디렉션 되지만 시간이 초과됩니다. sourceforge를 검색하면 다음 링크가 작동합니다. http://sourceforge.net/projects/cntlm/

cntlm을 다운로드하고 구성 한 후 프록시를 통해 gem을 설치 했으므로 Linux 배포판에 가장 적합한 솔루션 인 것 같습니다.


6

빠른 답변 : 설치 / 업데이트 모두에 매개 변수를 사용하여 프록시 구성 추가

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

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

5
기존 답변이있는 이전 질문에 대한 답변을 추가 할 때 새로운 답변이 무엇인지 설명하는 것이 유용합니다.
Jason Aller 2016 년

모든 세부 사항을 읽지 않고 명령을 직접 지정하는 방법 (빠른 답변)
Shantonu

환경 변수를 설정하는 것이 모든 사람을위한 옵션은 아닙니다 (한 번만 업데이트 할 때)
Shantonu

댓글 섹션이 아닌 답변 자체에 모든 설명을 추가하십시오
Nico Haase

5

해결 방법은 로컬 컴퓨터에 http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ 을 설치 하고이 프록시를 통해 gem을 실행하는 것입니다.

  • 설치 : apserver 097 (실험용 098이 아님)을 다운로드하고 압축을 풉니 다.
  • 구성 : 편집 server.cfg 파일과는 MS의에서 프록시의 값을 넣어 PARENT_PROXYPARENT_PROXY_PORT. DOMAIN 및 USER의 값을 입력하십시오. PASSWORD는 비워 두십시오 (콜론 뒤에는 없음) – 시작할 때 프롬프트가 표시됩니다.
  • apserver를 실행하십시오. cd aps097; python main.py
  • 보석 실행 : gem install—http-proxy http://localhost:5865/ library

5
구글 그룹에서 'apserver'는 이제 'NTLM Authorization Server'입니다. 전자를 검색한다고해서 후자로 리디렉션되는 것은 아님.
Darren Bishop

안녕하세요 Jarin, 귀하의 의견에 제공 한 링크로 이동하여 해당 다운로드를 찾을 수 없습니다. 다른 곳에서 다운로드 할 수있는 방법이 있습니까?
Matrich

1
Darren의 의견에 따라 @Matrich. apserver는 이제 이름이 바뀌고 여기에서 찾을 수 있습니다 : ntlmaps.sourceforge.net
atomicules

4

프록시 뒤에서 일하고 있으며 http://rubygems.org 에서 직접 다운로드하여 SASS를 설치했습니다 .

나는 그 다음 달렸다 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.

Ruby 업데이트 버전 2.4.1이 설치된 Windows 7에서 테스트되었습니다.

다음 명령 사용을 확인하려면 : ruby -v


1

배치 파일 (Bundler와 같은 다른 Ruby gem에 대해해야 할 수도 있음)을 편집하는 대신이 작업을 한 번 수행하고 올바르게 수행하는 것이 좋습니다.

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로 터널링하는 모든 사람에게; gemSOCKS 프록시를 사용 하는 명령 버전을 작성할 수 있습니다 .

  1. 설치 socksify와 함께 gem install socksify(당신이 프록시없이이 단계를 수행 할 수 있도록해야합니다 적어도)
  2. 기존 gem exe 복사

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. 좋아하는 편집기에서 열고 맨 위에 (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. 터널 설정

    ssh -D 8123 -f -C -q -N user@proxy
  5. proxy_gem로 gem 명령을 실행하십시오.

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.