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

时间:2008-08-07 05:21:17

标签: ruby proxy rubygems ironruby

我所支持的防火墙是在仅NTLM模式下运行Microsoft ISA服务器。 Hash是否有人通过Ruby SSPI gem或其他方法成功获得Ruby宝石安装/更新?

......或者我只是懒惰?

注意:rubysspi-1.2.4不起作用。

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

20 个答案:

答案 0 :(得分:208)

我无法通过命令行开关工作,但我只能通过设置HTTP_PROXY环境变量来实现。 (注意案例似乎很重要)。我有一个批处理文件,里面有这样的行:

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

在我明确到达此行之前,我设置了四个引用的变量。例如,如果我的用户名是“wolfbyte”,我的密码是“秘密”,我的代理名为“pigsy”,并在端口8080上运行:

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

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

答案 1 :(得分:206)

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

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

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

答案 2 :(得分:127)

这完全奏效了:

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

答案 3 :(得分:48)

我一直在使用cntlm(http://cntlm.sourceforge.net/)。配置与ntlmaps非常相似。

效果很好,还允许我将我的Ubuntu盒连接到ISA代理。

查看http://cntlm.wiki.sourceforge.net/了解详情

答案 4 :(得分:38)

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

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

使用-p参数传递代理。我正在使用Gem版本1.9.1。

答案 5 :(得分:16)

创建一个.gemrc文件(在/ etc / gemrc或〜/ .gemrc中,或者在/ opt / chef / embedded / etc / gemrc中使用chef gem),包含:

message_label->getLetter(6)->setColor(Color3B::RED);

然后你可以像往常一样http_proxy: http://proxy:3128

答案 6 :(得分:16)

这完全解决了我的问题:

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

您可能需要向其添加用户名和密码:

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

答案 7 :(得分:10)

如果您在通过代理进行身份验证时遇到问题,请务必使用以下格式设置环境变量:

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

user:password@语法似乎不起作用,并且在Stack Overflow和各种论坛帖子上也有一些名称很差的环境变量。

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

答案 8 :(得分:8)

我尝试了上述所有解决方案,但都没有奏效。如果您使用的是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/

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

答案 9 :(得分:7)

关于这个主题的帖子比比皆是,并且为了帮助其他人节省数小时尝试不同的解决方案,这是我修补时间的最终结果。

目前互联网上的三种解决方案是: rubysspi apserver cntlm

ruby​​sspi仅适用于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发行版的最佳解决方案。

答案 10 :(得分:5)

解决方法是在本地计算机上安装http://apserver.sourceforge.net,配置它并通过此代理运行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

答案 11 :(得分:4)

我在代理服务器后面工作,只是直接从http://rubygems.org下载安装了SASS。

然后我跑了sudo gem install [path/to/downloaded/gem/file]。我不能说这对所有宝石都有效,但它可能对某些人有所帮助。

答案 12 :(得分: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代理身份验证错误。

答案 13 :(得分:3)

如果您使用的是* nix系统,请使用:

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

然后尝试:

gem install ${gem_name}

答案 14 :(得分:2)

ruby​​sspi-1.3.1在Windows 7上为我工作,使用此页面上的说明:

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

答案 15 :(得分:1)

如果在代理后面,您可以导航到Ruby downloads,点击下载,这会将指定的更新(或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

答案 16 :(得分:1)

不是编辑批处理文件(你可能必须为其他Ruby宝石做的事情,例如Bundler),它可能最好这样做一次,并且做得恰到好处。

在Windows上,在我的公司代理后面,我所要做的就是将HTTP_PROXY环境变量添加到我的系统中。

  1. 开始 - >右键单击计算机 - >特性
  2. 选择"高级系统设置"
  3. 点击高级 - >环境变量
  4. 创建名为" HTTP_PROXY"的新系统变量,并将值设置为代理服务器
  5. 重新启动或注销并重新登录
  6. 根据您的身份验证要求,HTTP_PROXY值可以简单如下:

    http://proxy-server-name
    

    或者其他人指出的更为复杂

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

答案 17 :(得分:1)

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

它适用于OSX 10.9.3。

答案 18 :(得分:0)

适用于使用SSH隧道传输的任何人;您可以创建使用SOCKS代理的gem命令的版本:

  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
    

答案 19 :(得分:0)

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

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

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