Обновление 2: ну что тут сказать, опять работает. Буквально единственное, что я сделал, это обменял мой старый и медленный жесткий диск на SSD, который у меня все еще лежал. Кроме этого, я следовал точно такой же процедуре установки (чистая установка Windows, тот же установочный носитель, те же версии программного обеспечения, то же самое программное обеспечение в целом). Понятия не имею, как это может повлиять на что-либо. Я никогда не думал, что это проблема тайм-аута, потому что, как я уже говорил, он работал на этой машине с этой настройкой. Возможно, обновление Windows изменило поведение сети. Я не знаю. В любом случае, у меня все еще лежит старый жесткий диск, поэтому, если у кого-нибудь есть интересные идеи о том, как это исправить, я мог бы попробовать. Однако теперь, когда у меня есть рабочий ноутбук, это больше не является моим главным приоритетом.
Обновление 1: я могу подтвердить, что это работает на моем другом компьютере разработчика, который значительно более мощный, но в остальном имеет те же настройки (версии программного обеспечения, конфигурации и т.д.). Это особенно странно, учитывая, что моя проблемная машина - чистая установка.
Цель:
Я использую Vagrant для настройки среды веб-разработки на своих машинах с Windows 10.
Vagrant (в Windows) используется для раскрутки виртуальных машин Virtualbox (также в Windows) для размещения Debian Linux. Я использую подсистему Windows для Linux (Debian Distro) для запуска Ansible, чтобы настроить эти виртуальные машины и мой производственный сервер (на котором работает удаленная машина - как вы уже догадались - Debian).
Эта проблема:
Ansible не будет подключаться к виртуальным машинам Virtualbox. Он просто зависает при первой попытке подключения без каких-либо ошибок. Я должен прервать его с помощью Ctrl+C.
Вот где это становится странным: я могу нормально подключаться к виртуальным машинам с помощью Putty из Windows и SSH из WSL, поэтому я знаю, что виртуальная машина доступна и SSH работает. Ansible также может нормально подключиться к моему удаленному серверу, поэтому сам Ansible тоже не сломан. Проблема возникает только между Ansible и локальными виртуальными машинами и только на этом компьютере.
Эта та же самая установка (то же самое git repo, те же самые файлы конфигурации, те же версии программного обеспечения) фактически отлично работает на моей другой машине, и некоторое время назад она также работала на этой машине. Так что я знаю, что это работает в теории. Я просто не могу на всю жизнь понять, что отличается между этими машинами или что я изменил, что привело к его поломке.
Я провел дни в поисках интернета и пробовал все, что мог найти или придумать. К настоящему времени я даже полностью переустановил Windows и всю среду разработки с ней, но, к счастью, ошибка остается. Я в отчаянии, потому что, как сейчас, эта машина непригодна для разработки.
Справочная информация:
Я запускаю Ansible так (например):
ansible appserver -i environments/development --ask-vault-pass -k -e "ansible_user=vagrant" -m ping
после чего ansible запрашивает пароль SSH, пароль хранилища, и тогда ничего не происходит.
Когда я завершаю работу с помощью Ctrl+ CI, получаю следующую ошибку в /var/log/auth.log на виртуальной машине:
sshd[1343]: Connection closed by 192.168.33.1 port 51481 [preauth]
Этот IP-адрес является адресом только для сети хоста компьютера Virtualbox, как видно в диалоговом окне конфигурации сети Virtualbox, а не IP-адрес самой виртуальной машины. Sshd pid каждый раз отличается.
Когда я запускаю модуль ping в playbook, я сразу получаю три из этих строк (с разными портами в каждой строке) и еще одну из них после нажатия Ctrl+C.
Это мой ansible.cfg (в моем каталоге dir каталог в /etc не тронут):
[defaults]
force_handlers = True
hash_behaviour = merge
Инвентарь Ansible довольно не впечатляющий (только IP)
Когда я запускаю указанную выше команду ansible с -vvvv
я получаю следующее:
ansible 2.7.6
config file = /mnt/d/Source/main_server/ansible/ansible.cfg
configured module search path = [u'/home/my_user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516]
Using /mnt/d/Source/main_server/ansible/ansible.cfg as config file
SSH password:
Vault password:
setting up inventory plugins
/mnt/d/Source/main_server/ansible/environments/development did not meet host_list requirements, check plugin documentation if this is unexpected
Parsed /mnt/d/Source/main_server/ansible/environments/development inventory source with ini plugin
Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.7/dist-packages/ansible/plugins/callback/minimal.pyc
META: ran handlers
Trying secret <ansible.parsing.vault.PromptVaultSecret object at 0x7f8a35652610> for vault_id=default
<192.168.33.10> ESTABLISH SSH CONNECTION FOR USER: vagrant
<192.168.33.10> SSH: EXEC sshpass -d9 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o User=vagrant -o ConnectTimeout=10 -o ControlPath=/home/sseeland/.ansible/cp/d986014952 192.168.33.10 '/bin/sh -c '"'"'echo ~vagrant && sleep 0'"'"''
А потом только тишина, пока я не нажму Ctrl+C.
Это мой бродячий файл:
Vagrant.configure("2") do |config|
config.vm.box = "debian/stretch64"
config.vm.boot_timeout = 120
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
config.vm.provider "virtualbox" do |v|
v.customize [ "modifyvm", :id, "--nictype1", "virtio" ]
end
config.ssh.forward_agent = true
config.vm.define "dev" do |dev|
# Setting up private_network to have reliable ip and port from host
dev.vm.network :private_network, ip: "192.168.33.10", nic_type: "virtio"
# mount source code into machine
dev.vm.synced_folder "../../svenseeland_site/", "/svenseeland_site/", type: "virtualbox"
end
config.vm.define "staging" do |staging|
# Setting up private_network to have reliable ip and port from host
staging.vm.network :private_network, ip: "192.168.33.11", nic_type: "virtio"
end
# set timezone
config.vm.provision "shell", name: "set timezone", inline: <<-SHELL
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime
SHELL
# add vagrant user to SSH group
config.vm.provision "shell", name: "add vagrant user to SSH group", inline: <<-SHELL
usermod -a -G ssh vagrant
SHELL
# set root password
config.vm.provision "shell", name: "set root password", inline: <<-SHELL
echo -e "vagrant\nvagrant" | sudo passwd
SHELL
# enable passwordless root login to mirror the production server setup and open the door for Ansible
config.vm.provision "shell", name: "enable keyless ssh login", inline: <<-SHELL
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
service ssh restart
SHELL
end
Некоторые из этих настроек, касающихся пользователей и паролей для SSH, должны подготовить его к управлению Ansible и соответствовать состоянию init моего производственного сервера, как оно предоставляется хостером.
Версии программного обеспечения:
- Бродяга 2.2.3
- Virtualbox 6.0.4
- Ansible 2.7.6
- Debian 9.7 (официальный бродячий ящик)
- Windows 10 версия 1809, сборка 17763.253
- WSL/Debian обновлен (apt-get dist-upgrade)
Дайте мне знать, если вам нужна дополнительная информация.