Nie można ssh w środowisku złożonym z wielu maszyn

9

Stworzyłem trzy węzłowe, błędne środowisko wielu maszyn i mam problemy z ssh'ingiem od jednego błędnego vm do drugiego.

Oto plik 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 

Plik hosts (taki sam w każdym węźle):

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

Mogę pingować tam iz powrotem przez cały dzień z dowolnej maszyny na drugą, ale nie mogę ssh z jednej włóczęgi vm na drugą. Typowy komunikat o błędzie to (od węzła 1 do wzorca):

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

SSH działa, a port jest otwarty.

Zapora nie działa.

Jestem pewien, że ma to związek z kluczami ssh. Przyznaję, że nie jestem ekspertem.
Co robię źle tutaj, ludzie?

HBach
źródło
Zaktualizowano Tak, od jednego VM do drugiego w błędnym środowisku. Nie ma znaczenia, z którego vm do drugiego, coś jest nie tak.
HBach
Potrzebujesz prywatnego klucza włóczęgi w maszynie, nie pamiętasz, gdzie jest przechowywany na włóczęgowskim hoście, ale włóczęga jest skonfigurowany tak, aby zezwalał tylko na dostęp oparty na kluczach. (użycie klucza domyślnego nie jest oczywiście zalecane poza testami)
Tensibai,
@Tensibai Można również zalogować się bez kluczy ssh vagrant@hosti użyć również vagrantjako hasła.
030
Dodaj wynik ip awszystkich pól do pytania i sprawdź, czy adresy IP (172.28.128.3-5) są dostępne, gdy pola są wyłączone.
030
1
@ 030 zgodnie z komunikatem w pytaniu, CentOS pudełka, w przeciwieństwie do tych, Ubuntu, nie ustawić Vagrant hasła, dzięki czemu jedynym kluczem uwierzytelniania
Tensibai

Odpowiedzi:

3

Po Vagrant pliku rozwiązać ten problem.

Możesz uzyskać wszystkie obsługiwane pliki kluczowe wraz z tym błędnym plikiem na 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
źródło
To jest w pełni funkcjonalna odpowiedź, dzięki!
moztemur
Przeniesiono repozytorium kodu na github.com/malyabee/vagrant_ansible_lab
MalyaBee
2

Zgodnie z dokumentami należy użyć:

vagrant ssh [name|id]

Jeśli istnieje jeden węzeł, użyj, vagrant sshaw przypadku wielu węzłów zdefiniuj nazwę lub identyfikator maszyny wirtualnej, npvagrant ssh box1

Jeśli ktoś chciałby ssh między skrzynkami, mógłby utworzyć klucz ssh i przypisać klucz prywatny do każdego ze skrzynek i dodać klucz publiczny do pliku autoryzowanych kluczy.

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
źródło
Jak byś użył vagrant ssh namew pudełku? Pytanie dotyczy połączenia przez ssh z node1.local do master.local, którzy są komputerami rozpędzonymi przez włóczęgę.
Tensibai
co zostało już stwierdzone pod usuniętą odpowiedzią poniżej ...
Tensibai
Zaktualizuję odpowiedź
030
0

Wypróbuj ten link . Musisz wykonać jedną z następujących czynności:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (jeśli nie wyłączyłeś uwierzytelniania opartego na hasłach)
Ziarno kawy
źródło