Неможливо зробити ssh у бродячому середовищі


9

Я створив тривузлове мультимашинне бродяче середовище і у мене виникли проблеми, що перетворюються з однієї бродячої VM на іншу.

Ось 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 

Файл хостів (однаковий на кожному вузлі):

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

Я можу пінг вперед і назад цілий день з будь-якої машини на іншу, але я не можу переходити від одного бродячого VM до іншого. Типовим повідомленням про помилку є (від node1 до master):

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

SSH працює, а порт відкритий.

Брандмауер не працює.

Я впевнений, що це стосується клавіш ssh. Я легко визнаю, що не є експертом.
Що я тут роблю неправильно, люди?


Оновлено. Так, від одного vm до іншого у бродячому середовищі. Не має значення, від якого vm до іншого, щось невірно.
HBach

Вам потрібен приватний ключ бродяжника в машині, не можете згадати, де він зберігається у бродячому хості, але користувач бродяг налаштований на доступ лише до ключа, що базується на ключах. (використання тестування за замовчуванням не рекомендується із тестів, очевидно)
Тенсібай

@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

Це повністю функціональна відповідь, дякую!
moztemur

Перенесено сховище коду до github.com/malyabee/vagrant_ansible_lab
MalyaBee

2

Згідно з документами, слід використовувати:

vagrant ssh [name|id]

Якщо є один вузол, тоді використовуйте, vagrant sshа у випадку з декількома вузлами визначте ім'я або ідентифікатор VM, наприкладvagrant ssh box1

Якщо ви хочете переходити до ssh між полями, тоді можна створити ключ ssh та надати приватний ключ до кожного поля та додати відкритий ключ до файла дозволених ключів.

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

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

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end

Як би ви використовували vagrant ssh nameв коробці? Питання полягає у підключенні ssh від node1.local до master.local, які обидва машини обертаються бродячим.
Тенсібай

про що вже було сказано під видаленою відповіддю нижче ...
Тенсібай

Я оновлю відповідь
030

0

Спробуйте це посилання . Вам потрібно виконати одне з наступних дій:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (якщо ви не відключили автентифікацію на основі пароля)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.