是否有办法保护Vagrant配置的代理用户/密码?

是否有办法保护Vagrant配置的代理用户/密码?,vagrant,Vagrant,我正在处理几个使用Vagrant的用例,一直很难找到一个好的解决方案来优雅地处理公司代理。在我的初始文件中,我最终得到了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" co

我正在处理几个使用Vagrant的用例,一直很难找到一个好的解决方案来优雅地处理公司代理。在我的初始文件中,我最终得到了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"
显然,我希望避免将我的用户/密码存储在Vagrant文件中,因为我计划将其置于版本控制之下。我的下一次尝试是使用highline插件从vagrant文件中进行提示,但这会导致提示在每个vagrant命令期间出现,而不仅仅是在init期间(当此配置应用时)


我走错方向了吗?如果是这样的话,还有哪些其他选项可以用来处理非常适合Vagrant模型的代理配置?

您可以通过以下方式完成此操作:

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

然后在您的
vagrant文件中
可以有如下内容:

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"
您可以使用插件:

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

默认情况下,Apt也将同一代理与HTTPS URI一起使用,因此您不需要在案例中指定它

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


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

谢谢,我已经尝试过这种方法,它似乎工作正常。我正在考虑,如果proxy.yml文件没有提示,我会让它提示,但我仍然在争论,因为我正在考虑将这一部分作为一个无头的持续集成过程。
vagrant plugin install vagrant-proxyconf
config.apt_proxy.http = "http://me:mypwd@proxy.corp.com:3210"
export VAGRANT_APT_HTTP_PROXY="http://me:mypwd@proxy.corp.com:3210"