Как использовать vagrant в среде прокси?


93

Сеть моей компании использует прокси. Поэтому, когда я использую vagrant up, он показал мне ошибку разрешения 401.

Как я могу сделать некоторые настройки для использования бродяг?


1
Вы искали это в Google?
Ghost Answer

Извините, но теперь я знаю vagrant plugin install vagrant-proxyconf.
ithelloworld 09

Но после того, как я установил и настроил свой прокси-адрес для файла конфигурации, результат был таким же 401
ithelloworld

Ответы:


104

Установите 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"is that httpsor httpin the second line
eldos

2
это могло быть и то, и другое. В моей компании http и https проходят через тот же прокси, что и в http
Алехандро Морено

31
Хорошо, когда я запускаю vagrant plugin install vagrant-proxyconf, он попадает в мой прокси?
Марк Бродхерст,

10
Следует упомянуть только одно: если вы используете прокси, вы не можете устанавливать плагины.
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 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 07

4
Отличное решение, поскольку оно не требует помещения настроек прокси в Vagrantfile, где они явно не принадлежат
emrass

7
Windows Powersehell v6.0: $ env: http_proxy = " user: password @ host: port " $ env: https_proxy = " user: password @ host: port " vagrant plugin install 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.
Том Хундт,

54

Установка proxyconf решит эту проблему, но за прокси вы не можете установить плагин, просто используя команду vagrant plugin install, Bundler вызовет ошибку.

установите прокси в своей среде, если вы используете unix-подобную систему

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

или получите более подробный ответ здесь: Как использовать бандлер за прокси?

после этого настройте proxyconf


10
В Windows я сделал то, что вы предлагаете, но использовал «SET» вместо «export». Работает, как ожидалось, без каких-либо изменений в Vagrantfile.
Дэниел Уотроус

28

Автоматическое определение настроек вашего прокси и внедрение их во все ваши бродячие виртуальные машины

установить плагин прокси

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

теперь вверх свою виртуальную машину!


1
Мне нравится этот ответ, потому что он повторно использует существующие переменные HTTP_PROXY env, которые я уже объявил в своей ОС. Смерть вырезать-пасте !!
ripvlan

Похоже, хороший путь вперед. А как насчет отключения при выходе за пределы прокси? Обнаружено, что плагин vagrant пробивает гостевой Linux в нескольких местах, чтобы заставить работать различные инструменты / приложения. Есть простой способ отключить? Это также будет, по крайней мере, перевернуто из флага командной строки, и одно vagrant reloadбудет исправлено, и может быть лучше всего для автоматического обнаружения настроек прокси-сервера при подключении к новым сетям и либо оповещения пользователя, либо обеспечения бесперебойной работы. tmatilai.github.io/vagrant-proxyconf упомянул отключение, но не уверен, что он решает эти вопросы.
arntg

Не уверен, что понял, но этот фрагмент кода проверяет наличие http_proxy env var для настройки плагина прокси. Если вы не используете * _proxy env, он должен быть «не активирован» (?)
quazardous

11

На хосте Windows

открыть командную строку CMD;

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

Замените адрес и порт в приведенных выше фрагментах на все, что подходит для вашей ситуации. Вышеуказанное будет оставаться установленным, пока вы не закроете приглашение CMD. Если это сработает для вас, подумайте о добавлении их на постоянной основе в переменные среды, чтобы вам не приходилось устанавливать их каждый раз, когда вы открываете новое приглашение CMD.


9

На окнах вы должны установить переменную для определения настроек прокси, загрузить плагин 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

а затем вы можете предоставить настройки config.proxy.xxx в своем Vagrantfile, чтобы они не зависели от переменных настроек среды


Просто дополнительный параметр (rubygem от https до http), чтобы избежать ошибки при проверке сертификатов 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. Источник
Мартин

Отличная идея использовать plugin-sourceдля установки с локального GEM, но мне еще не удалось заставить это работать в Windows. Я не уверен, что мой синтаксис неправильный, например file://C:/path1/path2/vagrant-proxyconf-1.5.2.gem? Я также пробовал подход, о котором упоминал @Martin выше, это тоже не сработало, так как в этом случае он все еще пытается связаться с rubygems
Адам Берли

2
Это сработало для меня: vagrant plugin install C:/folder1/folder2/vagrant-proxyconf-1.5.2.gem --plugin-clean-sourcesключ в том, --plugin-clean-sourcesчто заставляет его не пытаться получить доступ к rubygems
Адам Берли,

2

В вопросе не упоминается поставщик виртуальных машин, но в моем случае я использую Virtual Box в той же среде. В графическом интерфейсе Virtual Box есть опция, которую мне нужно было включить, чтобы она работала. Находится в настройках приложения 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

(Если вы этого не сделаете, просто установите их как переменные среды, как говорят другие ответы, и обратитесь к ним из env в директивах config.proxy.http (s).)


1

Некоторые специальные символы в пароле создают проблемы в прокси. Либо избегайте их, либо избегайте использования специальных символов в пароле.


1

В PowerShell вы можете установить переменные среды http_proxy и https_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 >
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.