如何在代理环境中使用vagrant?

时间:2013-11-09 05:09:35

标签: proxy vagrant http-proxy

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

如何设置使用vagrant?

12 个答案:

答案 0 :(得分:92)

安装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"

答案 1 :(得分:76)

如果您的代理需要身份验证,最好设置环境变量,而不是将您的密码存储在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_NO_PROXY="127.0.0.1"
vagrant up

对于Windows使用set而不是export。

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

然后

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

答案 2 :(得分:53)

安装proxyconf会解决这个问题,但是在代理后面你只能使用命令vagrant plugin install来安装插件,Bundler会引发错误。

如果您正在使用类似系统的unix

,请在您的环境中设置代理
export http_proxy=http://user:password@host:port

或在此处获得更详细的答案:How to use bundler behind a proxy?

在设置proxyconf之后

答案 3 :(得分:27)

自动检测您的代理设置并将其注入所有流浪的虚拟机

安装代理插件

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!

答案 4 :(得分:11)

在Windows主机上

打开CMD提示符;

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

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

答案 5 :(得分: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文​​件中对代理设置进行硬编码

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

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

答案 6 :(得分:4)

您将需要安装插件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之间的粘合剂

要完整浏览,请查看this blog entry关于在公司代理服务器后面设置流浪者的信息

答案 7 :(得分:2)

问题没有提到VM Provider,但在我的情况下,我在相同的环境下使用Virtual Box。我需要启用Virtual Box GUI中的一个选项才能使其正常工作。位于Virtual Box应用偏好设置中:文件>>偏好设置...>>代理即可。一旦我配置了这个,我就可以毫无问题地工作了。希望这个提示也可以帮助你们。

答案 8 :(得分:1)

如果您确实希望代理配置和插件安装在您的Vagrant文​​件中,例如,如果您只为公司环境制作Vagrant文​​件并且无法让用户编辑环境变量,那么答案对我来说:

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中引用它们。)

答案 9 :(得分:1)

密码中的某些特殊字符会在代理中产生问题。要么逃避它们,要么避免在密码中使用特殊字符。

答案 10 :(得分:0)

在MS Windows中,这对我们有用:

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

等同于* nix:

export http_proxy=< proxy_url >
export https_proxy=< proxy_url >

答案 11 :(得分:0)

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

$env:http_proxy="http://www-cache-nrs.si.fr.intraorange:3128"
$env:https_proxy="http://www-cache-nrs.si.fr.intraorange:3128"