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?


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

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

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.