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

我后面的防火墙以ntlm模式运行Microsoft ISA服务器。哈希任何人成功地获得他们的Ruby宝石安装/更新通过Ruby SSPI宝石或其他方法?

... 还是我太懒了?

注意:rubysspi-1.2.4不起作用。

这也适用于“igem”,IronRuby项目的一部分

260205 次浏览

一个解决方法是在你的本地机器上安装http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/,配置它并通过这个代理运行gems。

  • 安装:只需下载apserver 097(而不是实验性的098!)并解压。
  • 配置:编辑server.cfg文件,将MS代理的值放在PARENT_PROXYPARENT_PROXY_PORT中。输入DOMAIN和USER的值。将PASSWORD保留为空(冒号后没有任何内容)-启动时将提示您。
  • 运行apserver: cd aps097; python main.py
  • 运行Gems: gem install—http-proxy http://localhost:5865/ library

我不能让我的工作从命令行开关,但我已经能够通过设置我的HTTP_PROXY环境变量来做到这一点。(注意,大小写似乎很重要)。我有一个批处理文件,其中有这样一行:

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

显然,我在这条直线之前设置了四个参考变量。例如,如果我的用户名是“wolfbyte”,我的密码是“secret”,我的代理名为“pigsy”,并在端口8080上运行:

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

您可能要小心如何管理它,因为它将密码以纯文本的形式存储在机器的会话中,但我认为这应该不是一个太大的问题。

我一直在工作中使用cntlm (http://cntlm.sourceforge.net/)。配置非常类似于ntlmaps。

工作得很好,也允许我把我的Ubuntu盒子连接到ISA代理。

查看http://cntlm.wiki.sourceforge.net/获取更多信息

关于这个话题的帖子很多,为了帮助其他人节省尝试不同解决方案的时间,这里是我花几个小时修补的最终结果。

目前互联网上有三种解决方案: rubysspi apserver cntlm < / p >

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发行版的最佳解决方案。

对于Windows操作系统,我使用Fiddler来解决这个问题。

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

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

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

这里的思想是通过SSH (socks5代理)创建一个动态隧道。然后我们配置tsocks以使用此隧道并启动我们的应用程序,在本例中:

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/ < a href = " 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客户机称为putty。

rubysspi-1.3.1适用于我的Windows 7,使用这一页的说明:

http://www.stuartellis.eu/articles/installing-ruby/

如果你在通过代理进行身份验证时遇到问题,请确保按照下面的格式设置环境变量:

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

user:password@语法似乎不起作用,在Stack Overflow和各种论坛帖子中也有一些命名糟糕的环境变量。

同时也要注意,你的gems可能需要一段时间才能开始下载。一开始我以为这行不通,但经过耐心之后,他们开始按预期下载。

这完全有效:

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

我尝试了其中的一些解决方案,但没有一个奏效。我终于找到了一个适合我的解决方案:

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

使用-p参数来传递代理。我使用的是Gem版本1.9.1。

我在代理后面工作,刚刚通过直接从http://rubygems.org下载安装了SASS。

然后运行sudo gem install [path/to/downloaded/gem/file]。我不能说这对所有宝石都适用,但它可能会帮助一些人。

如果您使用的是*nix系统,请使用以下命令:

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

然后试试:

gem install ${gem_name}

这完美地解决了我的问题:

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

你可能需要添加你的用户名和密码:

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

与其编辑批处理文件(对于其他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

如果你想使用SOCKS5代理,你可以尝试rubygems-socksproxy https://github.com/gussan/rubygems-socksproxy

它适用于OSX 10.9.3。

如果在代理的后面,你可以导航到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

这对我来说在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代理身份验证错误。

创建一个.gemrc文件(在/etc/gemrc或~/目录下)。例如,主厨gem在/opt/chef/embedded/etc/ Gemrc)中包含:

http_proxy: http://proxy:3128

然后你可以像往常一样gem install

快速回答:为安装/更新添加带有参数的代理配置

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


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

对于任何使用SSH隧道的人;你可以创建一个使用SOCKS代理的gem命令版本:

  1. 使用gem install socksify安装socksify(至少你需要能够在没有代理的情况下完成这一步)
  2. 复制你现有的gem exe

    cp $(command which gem) /usr/local/bin/proxy_gem
    
  3. Open it in your favourite editor and add this at the top (after the 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. Set up your tunnel

    ssh -D 8123 -f -C -q -N user@proxy
    
  5. Run your gem command with proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem