我后面的防火墙以仅 NTLM 模式运行 Microsoft ISA 服务器。哈希是否有人成功通过 Ruby SSPI gem 或其他方法安装/更新他们的 Ruby gem?
...还是我只是懒惰?
注意:rubysspi-1.2.4 不起作用。
这也适用于 IronRuby 项目的一部分“igem”
对于 Windows 操作系统,我使用 Fiddler 来解决这个问题。
运行宝石:
$ gem install --http-proxy http://localhost:8888 $gem_name
我无法从命令行开关让我的工作,但我已经能够通过设置我的HTTP_PROXY
环境变量来做到这一点。(请注意,案例似乎很重要)。我有一个批处理文件,其中有这样一行:
SET HTTP_PROXY=http://%USER%:%PASSWORD%@%SERVER%:%PORT%
在我到达这条线之前,我设置了四个引用变量。例如,如果我的用户名是“wolfbyte”,我的密码是“secret”,而我的代理名为“pigsy”并在端口 8080 上运行:
SET HTTP_PROXY=http://wolfbyte:secret@pigsy:8080
您可能需要小心管理它,因为它会将您的密码以纯文本形式存储在机器的会话中,但我认为这应该不是什么大问题。
这完全有效:
gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name
我在工作中一直在使用 cntlm ( http://cntlm.sourceforge.net/ )。配置与ntlmaps 非常相似。
效果很好,还允许我将我的 Ubuntu 机器连接到 ISA 代理。
我尝试了其中一些解决方案,但都没有奏效。我终于找到了一个适合我的解决方案:
gem install -p http://proxy_ip:proxy_port rails
使用-p
参数传递代理。我正在使用 Gem 版本 1.9.1。
创建一个 .gemrc 文件(在 /etc/gemrc 或 ~/.gemrc 中,或者例如在 /opt/chef/embedded/etc/gemrc 中使用 chef gem),其中包含:
http_proxy: http://proxy:3128
然后你可以gem install
像往常一样。
这完美地解决了我的问题:
gem install -p http://proxy_ip:proxy_port compass
您可能需要向其中添加您的用户名和密码:
gem install -p http://[username]:[password]@proxy_ip:proxy_port compass
如果您在通过代理进行身份验证时遇到问题,请务必按照以下格式设置环境变量:
set HTTP_PROXY=some.proxy.com
set HTTP_PROXY_USER=user
set HTTP_PROXY_PASS=password
该user:password@
语法似乎不起作用,并且在 Stack Overflow 和各种论坛帖子上也有一些命名错误的环境变量。
另请注意,您的 gem 可能需要一段时间才能开始下载。起初我认为它不起作用,但有了一点耐心,他们开始按预期下载。
快速回答:为安装/更新添加带有参数的代理配置
gem install --http-proxy http://host:port/ package_name
gem update --http-proxy http://host:port/ package_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/
尽管是为 Ubuntu 编写的,但该过程应该适用于所有基于 Unix 的机器。用于 Windows 的 tsocks 的替代品是 FreeCap ( http://www.freecap.ru/eng/ )。Windows 上可行的 SSH 客户端称为 putty。
关于这个主题的帖子比比皆是,为了帮助其他人节省尝试不同解决方案的时间,这是我数小时修补的最终结果。
目前互联网上的三个解决方案是: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 发行版的最佳解决方案。
一种解决方法是在本地计算机上安装http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/,对其进行配置并通过此代理运行 gems。
PARENT_PROXY
和PARENT_PROXY_PORT
. 输入 DOMAIN 和 USER 的值。将 PASSWORD 留空(冒号后没有任何内容)- 启动它时会提示您。cd aps097; python main.py
gem install—http-proxy http://localhost:5865/ library
我在代理后面工作,只是通过直接从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}
这在 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 代理身份验证错误。
rubysspi-1.3.1 使用此页面中的说明在 Windows 7 上为我工作:
与其编辑批处理文件(对于其他 Ruby gem,例如 Bundler,您可能必须这样做),最好只执行一次,然后正确执行。
在 Windows 上,在我的公司代理后面,我所要做的就是将HTTP_PROXY
环境变量添加到我的系统中。
HTTP_PROXY
”的新系统变量,并将值设置为您的代理服务器根据您的身份验证要求,该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
对于任何使用 SSH 隧道的人;您可以创建gem
使用 SOCKS 代理的命令版本:
socksify
(gem install socksify
您需要能够在没有代理的情况下执行此步骤,至少)复制现有的 gem exe
cp $(command which gem) /usr/local/bin/proxy_gem
在您最喜欢的编辑器中打开它并将其添加到顶部(在 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
设置你的隧道
ssh -D 8123 -f -C -q -N user@proxy
使用 proxy_gem 运行 gem 命令
SOCKS_PROXY=localhost:8123 proxy_gem push mygem