5

我正在使用 Vagrant 处理几个用例,并且一直难以想出一个好的解决方案来以优雅的方式处理公司代理。在我最初的 Vagrantfile 中,我最终得到了 apt.conf 的这个配置

user = 'me'
pwd = 'mypwd'    
config.vm.provision :shell, :inline => "echo 'Acquire::http::Proxy \"http://#{user}:#{pwd}@proxy.corp.com:3210\";' >> /etc/apt/apt.conf"
config.vm.provision :shell, :inline => "echo 'Acquire::https::Proxy \"http://#{user}:#{pwd}@proxy.corp.com:3210\";' >> /etc/apt/apt.conf"
config.vm.provision :shell, :inline => "echo 'Acquire::socks::Proxy \"http://#{user}:#{pwd}@proxy.corp.com:3128\";' >> /etc/apt/apt.conf"

显然,我想避免将我的用户/密码存储在 Vagrantfile 中,因为我计划将其置于版本控制之下。我的下一个尝试是使用 highline 插件从 Vagrantfile 中提示,但这会导致提示出现在每个 vagrant 命令期间,而不仅仅是在 init 期间(当此配置适用时)。

我会以错误的方式解决这个问题吗?如果是这样,还有哪些其他选项可用于处理非常适合 Vagrant 模型的代理配置?

4

2 回答 2

6

您可以通过以下方式执行此操作:

创建一个名为的文件proxy.yml并将其添加到您的文件.gitignore中,这样它就不会被提交。

然后在你里面Vagrantfile你可以有这样的东西:

if File.exist?("proxy.yml")
    require 'yaml'
    proxy = YAML::load(File.open('proxy.yml'))
    config.vm.provision :shell, :inline => "echo 'Acquire::http::Proxy \"http://#{proxy['user']}:#{proxy['pass']}@proxy.corp.com:3210\";' >> /etc/apt/apt.conf"
end

的内容proxy.yml将是:

user: "username"
pass: "password"
于 2013-06-17T21:32:44.690 回答
1

您可以使用vagrant-proxyconf插件:

vagrant plugin install vagrant-proxyconf

由于您可能希望对所有 Vagrant VM 使用相同的设置,因此可以将配置放入~/.vagrant.d/Vagrantfile(在您的机器上是本地的):

config.apt_proxy.http = "http://me:mypwd@proxy.corp.com:3210"

默认情况下,Apt 也使用与 HTTPS URI 相同的代理,因此您不需要在您的情况下指定它。

其他选项是使用环境变量传递配置。例如在命令行,~/.bashrc等:

export VAGRANT_APT_HTTP_PROXY="http://me:mypwd@proxy.corp.com:3210"

该插件还可以为整个 VM 配置代理,而不仅仅是 Apt。

于 2013-07-02T01:30:12.167 回答