如何从代理(ISA-NTLM)后面更新Ruby Gems


232

我背后的防火墙正在仅NTLM模式下运行Microsoft ISA服务器。哈希是否成功通过Ruby SSPI gem或其他方法来安装/更新其Ruby宝石?

...还是我只是懒惰?

注意:rubysspi-1.2.4不起作用。

这也适用于Ironig项目的“ igem”


我已经使rubysspi可以工作了,但是仍然需要很多摆弄。如果要从Git Bash shell使用它,则需要在.bashrc文件中添加一个别名,例如:alias gem='ruby -rspa `which gem`'
iconoclast 2012年

1
如果您在执行大多数答案后都遇到代理问题,请尝试sudo通过添加-E开关来确保可以访问您的环境变量,例如sudo -E doSomething
–kayleeFrye_onDeck

Answers:


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 ...”;幸运的是,我的代理服务器不需要域规范,而没有它,gem可以正常工作。
spoulson

ISA允许管理员指定要验证的默认域。您可以尝试不使用域,而只是像spoulson建议的那样使用用户名。如果您的ISA管理员已指定该默认域,并且您的用户帐户位于该域中,则该设置将对您有效(假设防火墙上没有阻止规则)
squillman

11
@spoulson如果需要域,则需要对反斜杠进行URI编码,例如http:// domain%5Cuserid @ server:port。
Ian G

13
仅供参考,在Windows中,您可以将设置的http_proxy行添加到gem.bat中,这样您就不必每次都设置代理了。
Ed Manet

1
顺便说一句,如果您的密码包含特殊符号,则应该对它们进行urlencode。例如@%40etc 取代
Andrey Regentov '16

221

对于Windows操作系统,我使用Fiddler解决了该问题。

  1. 从www.fiddler2.com安装/运行Fiddler
  2. 运行宝石:

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

3
工作了,比ntlmaps和cntlm容易得多。
原子

36
这对我有用。请注意,并非在所有情况下都需要Fiddler。只要gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name是所有需要我。
Polaris878 2011年

在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:// [ 用户 ]:[ 密码 ] @ [ 服务器 ]:[ 端口 ]
vanderwyst 2012年

我无法安装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
有用

我在bash个人资料中添加了一个别名:alias geminstall='gem install --http-proxy ${http_proxy}'使我的生活更轻松。
bgStack15 '16

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 ”。作品!
Konrads 2012年

在Windows上也可以完美地工作。谢谢!
Subrat Pattnaik 2014年


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@语法似乎不起作用,并且在Stack Overflow和各种论坛帖子上还漂浮着一些名称不正确的环境变量。

另请注意,您的宝石可能需要一段时间才能开始下载。起初我以为它没有用,但是耐心一点,他们开始按预期下载。


在连接到公司LAN的Windows 7笔记本电脑上,Benjamin Wootton的技巧非常有用。在DOS提示符下的命令行窗口中,我将HTTP_PROXY设置为http://本地主机:8888(忽略空格),然后分别将我的LAN用户名和密码用于HTTP_PROXY_USER和HTTP_PROXY_PASS。
raycarr

8

我尝试了上述所有解决方案,但是没有一个起作用。如果您使用的是Linux / macOS,我强烈建议在ssh隧道上使用tsocks。要使此设置正常工作,您需要的是一台可以通过ssh登录的计算机,此外还安装了一个名为tsocks的程序。

这里的想法是通过SSH(socks5代理)创建动态隧道。然后,在这种情况下,我们将tsock配置为使用此隧道并启动我们的应用程序:

tsocks gem install ...

或考虑Rails 3.0:

tsocks bundle install

可以在下面找到更详细的指南:

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

尽管是为Ubuntu编写的,但该过程应适用于所有基于Unix的计算机。Windows的tsocks的替代方法是FreeCap(http://www.freecap.ru/eng/)。Windows上可行的SSH客户端称为腻子。


我在备份中找到了该文章,并使用相同的URL重新发布了该文章。
ByScripts 2014年

1
该URL仍然不可用。在提供到非站点非Stack Exchange站点的链接时,请在此处总结主要部分并归功于该站点。这样,当链接断开时,重要的部分仍然在这里。
Tin Man'1

7

关于该主题的文章比比皆是,为了帮助他人节省尝试不同解决方案的时间,这是我努力工作的最终结果。

目前,围绕Internet的三个解决方案是:rubysspi apserver cntlm

rubysspi仅在Windows计算机AFAIK上运行,因为它依赖于Win32Api库。因此,如果您在尝试通过代理运行的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
在使用现有答案为较旧的问题添加答案时,解释您的答案添加的新内容很有用。
詹森·艾勒

直接指定命令而无需详细信息阅读所有详细信息(快速解答)
Shantonu

并且,设置环境变量并不是每个人的选择(当您仅进行一次更新时)
Shantonu

请添加所有解释答案本身,而不是注释部分
尼科·哈泽

5

解决方法是在本地计算机上安装http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/,对其进行配置并通过此代理运行gem。

  • 安装:只需下载apserver 097(而不是实验性098!)并解压缩即可。
  • 配置:编辑server.cfg文件,然后将MS代理的值放在PARENT_PROXY和中PARENT_PROXY_PORT。输入DOMAIN和USER的值。将PASSWORD(密码)留空(冒号之后)–启动密码时,系统会提示您。
  • 运行apserver: cd aps097; python main.py
  • 运行宝石: gem install—http-proxy http://localhost:5865/ library

5
在google组中阅读,“ apserver”现在是“ NTLM Authorization Server”;遗憾的是,搜索前者不会重定向到后者。
达伦·毕晓普

贾林,您好,我转到您在评论中提供的链接,但找不到该下载。有什么办法可以从其他地方下载它?
马特里希(Matrich)2010年

1
@Matrich,根据Darren的评论。apserver现在已重命名并在以下位置
原子2011年

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 downloads,单击Download,这会将指定的更新(或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 gem,例如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. 复制您现有的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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.