Невозможно ssh в бродячей среде с несколькими машинами

9

Я создал многоузловую бродячую среду, состоящую из трех узлов, и у меня возникают проблемы с переходом от одного бродячего виртуального компьютера к другому.

Вот Vagrantfile:

Vagrant.configure("2") do |config| 
  config.vm.box = "centos/7"

  config.vm.define "master" do |master|
    master.vm.hostname = "master.local" 
    master.vm.network "private_network", type: "dhcp"
  end 

  config.vm.define "node1" do |node1|
     node1.vm.hostname = "node1.local" 
     node1.vm.network "private_network", type: "dhcp" 
  end 

  config.vm.define "node2" do |node2|
    node2.vm.hostname = "node2.local" 
    node2.vm.network "private_network", type: "dhcp" 
  end  
end 

Файл hosts (одинаковый на каждом узле):

$ cat /etc/hosts
172.28.128.3    master.local    master
172.28.128.4    node1.local     node1
172.28.128.5    node2.local     node2

Я могу пинговать туда и обратно весь день с любой машины на другую, но я не могу перешагнуть ssh с одного бродячего vm на другой. Типичное сообщение об ошибке (от узла 1 до мастера):

[vagrant@node1.local] $ ssh vagrant@172.28.128.3
Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 

SSH работает, а порт открыт.

Брандмауэр не работает.

Я уверен, что это связано с ключами SSH. Я с готовностью признаю, что я не эксперт.
Что я здесь делаю не так, ребята?

HBach
источник
Обновлено. Да, от одного vm к другому в бродячей среде. Неважно, от какого vm к другому, что-то не так.
HBach
Вам нужен личный ключ vagrant на машине, вы не можете вспомнить, где он хранится на хосте vagrant, но пользователь vagrant настроен на разрешение только доступа на основе ключей. (использование ключа по умолчанию не рекомендуется вне тестов, очевидно)
Tensibai
@ Tensibai Можно также войти без ключей ssh vagrant@hostи использовать vagrantв качестве пароля.
030
Пожалуйста, добавьте вывод ip aвсех ящиков к вопросу и проверьте, доступны ли IP-адреса (172.28.128.3-5), когда ящики не работают.
030
1
@ 030, согласно сообщению в вопросе, ящики с кентосом, в отличие от ящиков Ubuntu, не устанавливают бродячий пароль, разрешая только аутентификацию по ключу
Tensibai

Ответы:

3

Следующий файл Vagrant решает эту проблему.

Вы можете получить все вспомогательные ключевые файлы вместе с этим бродячим файлом по адресу https://github.com/malyabee/IaaC/tree/master/ansible_lab

$commonscript = <<-SCRIPT
sudo yum update -y
sudo yum install python2 epel-release -y
sudo yum install -y ansible
sudo echo "192.168.22.10    ansiblecontroller.example.com ansiblecontroller" >> /etc/hosts
sudo echo "192.168.22.11   node01.example.com   node01" >> /etc/hosts
sudo echo "192.168.22.12   node02.example.com      node02" >> /etc/hosts
SCRIPT

$nodescript = <<-SCRIPT
cat /vagrant/ansible_lab.pub >> /home/vagrant/.ssh/authorized_keys
SCRIPT

$ansiblescript = <<-SCRIPT
sudo yum install ansible -y
sudo cp -r /vagrant/ansible_lab /home/vagrant/.ssh/id_rsa
sudo chmod 400  /home/vagrant/.ssh/id_rsa
sudo chown vagrant:vagrant /home/vagrant/.ssh/id_rsa
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "ansiblecontroller" do |ansiblecontroller|
    ansiblecontroller.vm.box = "centos/7"
    ansiblecontroller.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    ansiblecontroller.vm.network "private_network", ip: "192.168.22.10", virtualbox__intnet: "mynetwork01"
    ansiblecontroller.vm.hostname = "ansiblecontroller.example.com"
    # Installing required packages for ansible controller node
    ansiblecontroller.vm.provision "shell", inline: $commonscript
    ansiblecontroller.vm.provision "shell", inline: $ansiblescript
  end

  config.vm.define "node01" do |node01|
    node01.vm.box = "centos/7"
    node01.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    node01.vm.network "private_network", ip: "192.168.22.11", virtualbox__intnet: "mynetwork01"
    node01.vm.hostname = "node01.example.com"
    # Installing required packages for  node01
    node01.vm.provision "shell", inline: $commonscript
    node01.vm.provision "shell", inline: $nodescript
  end
  config.vm.define "node02" do |node02|
    node02.vm.box = "centos/7"
    node02.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    node02.vm.network "private_network", ip: "192.168.22.12", virtualbox__intnet: "mynetwork01"
    node02.vm.hostname = "node02.example.com"
    # Installing required packages for  node01
    node02.vm.provision "shell", inline: $commonscript
    node02.vm.provision "shell", inline: $nodescript
  end
end
MalyaBee
источник
Это полностью функциональный ответ, спасибо!
Мозтемур
Перемещено хранилище кода на github.com/malyabee/vagrant_ansible_lab
MalyaBee,
2

Согласно документам следует использовать:

vagrant ssh [name|id]

Если есть один узел, тогда используйте, vagrant sshа в случае многоузлового - укажите имя или идентификатор виртуальной машины, напримерvagrant ssh box1

Если вы хотите использовать ssh между блоками, то вы можете создать ssh-ключ и предоставить закрытый ключ для каждого блока и добавить открытый ключ в файл authorized_keys.

https://www.vagrantup.com/docs/provisioning/file.html

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
030
источник
Как бы вы использовали vagrant ssh nameв коробке? Речь идет о подключении по ssh от node1.local к master.local, которые обе машины раскручивают по vagrant.
Тенсибай
что уже было сказано под вашим удаленным ответом ниже ...
Tensibai
Я буду обновлять ответ
030
0

Попробуйте эту ссылку . Вам необходимо выполнить одно из следующих действий:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (если вы не отключили аутентификацию на основе пароля)
Кофейное зерно
источник