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

时间:2013-06-17 18:42:53

标签: vagrant

我正在使用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模型的代理配置?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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。