【问题标题】:How do I update Ruby Gems from behind a Proxy (ISA-NTLM)如何从代理 (ISA-NTLM) 后面更新 Ruby Gems
【发布时间】:2010-09-05 11:42:20
【问题描述】:

我所使用的防火墙在 NTLM-only 模式下运行 Microsoft ISA 服务器。哈希是否有人成功通过 Ruby SSPI gem 或其他方法安装/更新 Ruby gem?

...还是我只是懒惰?

注意:rubysspi-1.2.4 不起作用。

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

【问题讨论】:

  • 我已经让 ruby​​sspi 开始工作了,但是需要进行大量的摆弄。如果你想在 Git Bash shell 中使用它,你需要在你的 .bashrc 文件中添加一个别名,例如:alias gem='ruby -rspa `which gem`'
  • 如果您在执行大多数这些答案中的步骤后遇到代理问题,请尝试通过添加-E 开关来确保sudo 可以访问您的环境变量,例如sudo -E doSomething跨度>

标签: ruby proxy rubygems ironruby


【解决方案1】:

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

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

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

【讨论】:

  • 工作得很好,比 ntlmaps 和 cntlm 容易得多。
  • 这对我有用。请注意,并非所有情况都需要 Fiddler。我只需要gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name
  • 在 Windows 7 上,--http-proxy 标志必须放在 gem 名称之后,例如gem install --http-proxy yourproxy.address;port。否则,它会抱怨一个无效的命令行开关。
  • 适用于 Windows 10
  • 这对我来说是公司代理背后的工作。不需要提琴手。例如安装 jekyll gem 只需运行:sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
【解决方案2】:

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

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

我在到达这一行之前设置了四个引用变量。举个例子,如果我的用户名是“wolfbyte”,我的密码是“secret”,我的代理叫做“pigsy”并且在端口 8080 上运行:

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

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

【讨论】:

  • 似乎 'gem' 无法识别代理字符串中的反斜杠,无论是通过 http_proxy env var 还是 --http-proxy 参数。例如从我的 Ubuntu 盒子 --http-proxy http://domain\\userid@server:port 给我错误:“无效参数:--http-proxy ...”;幸运的是,我的代理服务器不需要域规范,gem 在没有它的情况下也能正常工作。
  • ISA 允许管理员指定一个默认域进行身份验证。您可以尝试省略域,只使用 spoulson 建议的用户名。如果您的 ISA 管理员已指定所述默认域并且您的用户帐户在该域中,这应该对您有用(假设防火墙上没有阻止规则)
  • @spoulson 如果需要域,则需要对反斜杠进行 URI 编码,例如http://domain%5Cuserid@server:port。
  • 仅供参考,在 Windows 中,您可以将 set http_proxy 行添加到 gem.bat 中,这样您就不必记住每次都设置代理。
  • 顺便说一句,如果您的密码包含特殊符号,您应该对其进行urlencode。例如。将@ 替换为%40
【解决方案3】:

这完全有效:

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

【讨论】:

  • 这是最新的答案,它也适用于 Windows。我必须添加我的用户名和密码: gem install --http-proxy http://[user]:[password]@[server i>]:[端口]
  • 我无法安装 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}',让我的生活更轻松。
【解决方案4】:

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

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

查看http://cntlm.wiki.sourceforge.net/了解更多信息

【讨论】:

  • 这是所有尝试过的最不痛苦的方法。在 Ubuntu/Debian 上,我执行 apt-get install cntlm,编辑配置,然后导出 http_proxy="localhost:3128"。有效!
  • 在 Windows 上也能完美运行。谢谢!
【解决方案5】:

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

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

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

【讨论】:

  • 通过将代理部分替换为username:password@proxy_ip:proxyport完成安装
  • 我必须添加用于https 连接的proxy_ip 才能正常工作!太棒了:D(gem 版本 2.0.14)
【解决方案6】:

创建一个 .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
【解决方案7】:

这完美解决了我的问题:

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

您可能需要在其中添加您的用户名和密码:

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

【讨论】:

    【解决方案8】:

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

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

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

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

    【讨论】:

    • 在我连接到公司 LAN 的 Windows 7 笔记本电脑上,采纳 Benjamin Wootton 的建议效果很好。在 DOS 提示符的命令行窗口中,我将 HTTP_PROXY 设置为 http://localhost:8888(忽略空格),然后分别将我的 LAN 用户名和密码用于 HTTP_PROXY_USER 和 HTTP_PROXY_PASS。
    【解决方案9】:

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

    【讨论】:

    • 我在备份中找到了这篇文章,然后用相同的 URL 重新发布了它。
    • 网址仍然不可用。在提供指向非 Stack Exchange 站点的非现场链接时,请在此处总结突出部分并注明该站点。这样,当链接断开时,重要的部分仍然在这里。
    【解决方案10】:

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

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

    【讨论】:

    • 在使用现有答案添加旧问题的答案时,解释您的答案添加的新内容很有用。
    • 直接指定命令而不详细阅读所有细节(快速回答)
    • 而且,设置环境变量并不是每个人都可以选择的(当您只进行一次更新时)
    • 请将所有解释添加到答案本身,而不是评论部分
    【解决方案11】:

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

    目前互联网上的三种解决方案是: 红宝石 应用服务器 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发行版的最佳解决方案。

    【讨论】:

      【解决方案12】:

      一种解决方法是在您的本地计算机上安装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

      【讨论】:

      • 在 google 群组中读到“apserver”现在是“NTLM 授权服务器”;遗憾的是,搜索前者并没有重定向到后者。
      • 嗨 Jarin,我访问了您在评论中提供的链接,但找不到该下载。有什么办法可以从其他地方下载吗?
      • @Matrich 根据达伦的评论。 apserver 现在已重命名并在此处找到:ntlmaps.sourceforge.net
      【解决方案13】:

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

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

      【讨论】:

        【解决方案14】:

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

        【讨论】:

          【解决方案15】:

          如果你在 *nix 系统上,使用这个:

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

          然后尝试:

          gem install ${gem_name}
          

          【讨论】:

            【解决方案16】:

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

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

            【讨论】:

            • 网站不存在了!
            【解决方案17】:

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

            它适用于我在 OSX 10.9.3 上。

            【讨论】:

              【解决方案18】:

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

              【讨论】:

                【解决方案19】:

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

                【讨论】:

                  【解决方案20】:

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

                  1. 安装socksifygem 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
                    

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-08-24
                    • 1970-01-01
                    相关资源
                    最近更新 更多