如何在代理环境中使用无业游民?


92

我公司的网络正在使用代理。因此,当我使用时vagrant up,它显示了401权限错误。

我该如何做一些设置才能使用流浪汉?


1
你用谷歌搜索吗?
幽灵答案

抱歉,我没有vagrant plugin install vagrant-proxyconf。现在我知道了。
ithelloworld

但是,在我安装代理URL并将其设置为配置文件后,结果是相同的。401
ithelloworld 2013年

Answers:


103

安装proxyconf:

vagrant plugin install vagrant-proxyconf

配置您的Vagrantfile:

config.proxy.http     = "http://yourproxy:8080"
config.proxy.https    = "http://yourproxy:8080"
config.proxy.no_proxy = "localhost,127.0.0.1"

4
config.env_proxy.*自2.0版起已弃用,并已由取代config.proxy.*
Tomalak

config.proxy.https = "https://yourproxy:8080"是第二行https还是http在第二行
eldos

2
可能两者都有。在我公司的HTTP和HTTPS通过同一代理是在HTTP去
亚历杭德罗·莫雷诺

30
确定,当我运行“ vagrant plugin install vagrant-proxyconf”时,它会命中我的代理吗?
Mark Broadhurst

9
只需提及一件事,如果您在代理后面,则无法安装插件。
user3426711

87

如果您的代理服务器需要身份验证,最好设置环境变量,而不是将密码存储在Vagrantfile中。此外,您的Vagrantfile可以被不位于代理后面的其他人轻松使用。

对于Mac / Linux(在Bash中)

export http_proxy="http://user:password@host:port"
export https_proxy="http://user:password@host:port"
vagrant plugin install vagrant-proxyconf

然后

export VAGRANT_HTTP_PROXY=${http_proxy}
export VAGRANT_HTTPS_PROXY=${https_proxy}
export VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

对于Windows,请使用set而不是export。

set http_proxy=http://user:password@host:port
set https_proxy=https://user:password@host:port
vagrant plugin install vagrant-proxyconf

然后

set VAGRANT_HTTP_PROXY=%http_proxy%
set VAGRANT_HTTPS_PROXY=%https_proxy%
set VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

1
另外,如果您不希望它保留在您的环境中,则可以只使用一个命令就对该环境变量进行VAGRANT_HTTP_PROXY =“ user:password @ host:port ” 迁移(不导出或设置)。
maccam912

4
很棒的解决方案,因为它不需要将代理设置放在明显不属于它们的Vagrantfile中
赞扬

7
Windows Powersehell v6.0:$ env:http_proxy =“ user:password @ host:port ” $ env:https_proxy =“ user:password @ host:port ” vagrant插件安装vagrant-proxyconf
Xolani

1
对于使用Windows Git Bash的用户,请使用Mac / Linux(在Bash中)说明。例如:export http_proxy =“ user:password @ host:port
Xolani

1
export VAGRANT_HTTPS_PROXY=${https_proxy}在Mac / Linux说明中忘记了(?)。
汤姆·洪特

53

安装proxyconf将解决此问题,但是在代理后面,您不能仅使用命令安装插件vagrant plugin install,Bundler会引发错误。

如果您使用的是类似Unix的系统,请在您的环境中设置代理

export http_proxy=http://user:password@host:port

或在此处获得更详细的答案:如何在代理后面使用捆绑程序?

设置完proxyconf之后


10
在Windows上,我按照您的建议进行操作,但是使用“ SET”代替“ export”。无需更改Vagrantfile即可按预期工作。
丹尼尔·瓦特鲁斯

28

自动检测您的代理设置并将其注入所有无用的VM中

安装代理插件

vagrant plugin install vagrant-proxyconf

将此conf添加到您的私有/用户VagrantFile(将对您的所有项目执行):

vi $HOME/.vagrant.d/Vagrantfile

Vagrant.configure("2") do |config|
  puts "proxyconf..."
  if Vagrant.has_plugin?("vagrant-proxyconf")
    puts "find proxyconf plugin !"
    if ENV["http_proxy"]
      puts "http_proxy: " + ENV["http_proxy"]
      config.proxy.http     = ENV["http_proxy"]
    end
    if ENV["https_proxy"]
      puts "https_proxy: " + ENV["https_proxy"]
      config.proxy.https    = ENV["https_proxy"]
    end
    if ENV["no_proxy"]
      config.proxy.no_proxy = ENV["no_proxy"]
    end
  end
end

现在启动您的VM!


1
我喜欢这个答案,因为它重用了我已经在主机操作系统上声明的现有HTTP_PROXY env变量。死亡切粘贴!
ripvlan 2015年

看起来是前进的好方法。在代理外禁用它怎么办?发现该游民插件在多个地方打来宾linux,以使各种不同的工具/应用程序都能正常工作。有禁用的简单方法吗?这样至少也可以从命令行标志中翻转过来vagrant reload,并且可以解决单个问题,并且最好是在连接到新网络时自动检测代理设置的输入/输出,并警告用户或使其无缝运行。 tmatilai.github.io/vagrant-proxyconf提到了禁用,但不确定是否解决了这些问题。
arntg

不确定要理解,但是此代码段测试了用于设置代理插件的http_proxy env var的存在。如果您不使用* _proxy env,则应将其“未激活”(?)
危险的

11

在Windows主机上

打开一个CMD提示;

set HTTP_PROXY=http://proxy.yourcorp.com:80
set HTTPS_PROXY=https://proxy.yourcorp.com:443

将以上代码段中的地址和端口替换为适合您情况的任何内容。在关闭CMD提示之前,以上设置将保持不变。如果对您有用,请考虑将它们永久添加到您的环境变量中,这样您就不必在每次打开新的CMD提示时都进行设置。


9

在Windows上,您必须设置一个变量以指定代理设置,然后下载vagrant-proxyconf插件:(用正确的值替换{PROXY_SCHEME}(http://或https://),{PROXY_IP}和{PROXY_PORT})

set http_proxy={PROXY_SCHEME}{PROXY_IP}:{PROXY_PORT}
set https_proxy={PROXY_SCHEME}{PROXY_IP}:{PROXY_PORT}

之后,您可以添加插件以在流浪者文件中对代理设置进行硬编码

vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.org

然后您可以在Vagrantfile中提供config.proxy.xxx设置以独立于环境设置变量


只是一个附加参数(从https到http的rubygem),可避免在验证SSL证书时出错:vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.org src
boly38

这是比以前的解决方案更好的解决方案,因为该解决方案不需要任何其他功能。其他解决方案(安装插件)需要首先设置免费互联网访问权限。
罗尔·卢纳

5

您将需要安装插件proxyconf,因为这可以在VagrantFile中直接配置来宾计算机的代理

config.proxy.http     = "http://proxy:8888"
config.proxy.https    = "http://proxy:8883"
config.proxy.no_proxy = "localhost,127.0.0.1"

但是,仍有很多事情可能会出错。首先,您可能无法在代理后面安装无业游民的插件。如果是这种情况,您应该从rubygems.org下载源代码并从源代码安装

$ vagrant plugin install vagrant-proxyconf --plugin-source file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem

如果您解决了该问题,那么您可能有幸成为NTLM代理的支持者,这意味着,如果您在来宾计算机上使用* nix,那么您还有很多路要走,因为NTLM身份验证本身不受支持。解决这个问题。我已经使用CNTLM解决了这一难题。它充当标准授权协议和NTLM之间的粘合剂

有关完整的演练,请查看此博客条目该条目关于在公司代理后面设置流浪汉


我想知道为什么这被否决。它说明了如何解决该问题以及如何解决可能遇到的其他潜在问题
Rune FS

这难道不是已经多次提供相同的答案了吗?此外,它没有说要成为企业代理,该怎么做才能获得无所事事的插件,它只是说这将是一个问题,然后再链接到其他地方。
eis

看起来现在应该是vagrant plugin install file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem资料来源
马丁(Martin)

plugin-source从本地GEM安装的好主意,但我还没有设法在Windows上使其正常工作。我不确定我的语法是否错误,例如file://C:/path1/path2/vagrant-proxyconf-1.5.2.gem?我还尝试了@Martin上面提到的方法,但这种方法也没有用,因为它仍在尝试与rubygems联系
Adam Burley,

2
这对我有用:vagrant plugin install C:/folder1/folder2/vagrant-proxyconf-1.5.2.gem --plugin-clean-sources关键是--plugin-clean-sources导致它不尝试访问rubygems
Adam Burley

2

这个问题没有提到VM Provider,但就我而言,我在同一环境下使用Virtual Box。我需要启用Virtual Box GUI中的一个选项才能使其工作。位于Virtual Box应用程序的首选项中:文件>>首选项... >>代理。配置完此功能后,我可以毫无问题地工作。希望本文也能对您有所帮助。


1

如果您确实希望将代理配置和插件安装放在Vagrantfile中,例如,如果要为公司环境制作Vagrantfile,而又不能让用户编辑环境变量,那么这就是我的答案:

ENV['http_proxy']  = 'http://proxyhost:proxyport'
ENV['https_proxy'] = 'http://proxyhost:proxyport'

# Plugin installation procedure from http://stackoverflow.com/a/28801317
required_plugins = %w(vagrant-proxyconf)

plugins_to_install = required_plugins.select { |plugin| not Vagrant.has_plugin? plugin }
if not plugins_to_install.empty?
  puts "Installing plugins: #{plugins_to_install.join(' ')}"
  if system "vagrant plugin install #{plugins_to_install.join(' ')}"
    exec "vagrant #{ARGV.join(' ')}"
  else
    abort "Installation of one or more plugins has failed. Aborting."
  end
end

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.proxy.http     = "#{ENV['http_proxy']}"
  config.proxy.https    = "#{ENV['https_proxy']}"
  config.proxy.no_proxy = "localhost,127.0.0.1"
  # and so on

(如果不这样做,则像其他答案一样将它们设置为环境变量,并在config.proxy.http(s)指令中从env引用它们。)


1

密码中的某些特殊字符在代理中造成问题。请逃避它们,或避免在密码中包含特殊字符。


1

在PowerShell中,您可以像这样设置http_proxyhttps_proxy环境变量:

$env:http_proxy="http://proxy:3128"
$env:https_proxy="http://proxy:3128"

0

在MS Windows中,这适用于我们:

set http_proxy=< proxy_url >
set https_proxy=< proxy_url >

相当于* nix:

export http_proxy=< proxy_url >
export https_proxy=< proxy_url >
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.