Impossibile ssh in un ambiente vagabondo multi-macchina


9

Ho creato un ambiente vagabondo multi-macchina a tre nodi e sto riscontrando problemi di trasmissione da un vagabondo all'altro.

Ecco il 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 

Il file hosts (lo stesso su ciascun nodo):

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

Posso fare il ping avanti e indietro tutto il giorno da qualsiasi macchina all'altra, ma non posso andare da un vagabondo all'altro. Il tipico messaggio di errore è (dal nodo 1 al master):

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

SSH è in esecuzione e la porta è aperta.

Il firewall non è in esecuzione.

Sono sicuro che questo abbia a che fare con i tasti ssh. Ammetto prontamente di non essere un esperto.
Cosa sto sbagliando qui gente?


Aggiornato. Sì, da una VM all'altra in un ambiente vagabondo. Non importa da quale VM a un altro, qualcosa non è corretto.
HBach,

È necessaria la chiave privata di vagrant all'interno della macchina, non si ricorda dove si trova nell'host vagrant ma l'utente vagrant è configurato per consentire solo l'accesso basato su chiave. (ovviamente non è consigliabile usare la chiave predefinita fuori dai test)
Tensibai

@Tensibai One potrebbe anche accedere senza le chiavi ssh vagrant@hoste utilizzare anche vagrantcome password.
030

Aggiungi l'output di ip atutte le caselle alla domanda e controlla se gli indirizzi IP (172.28.128.3-5) sono disponibili quando le caselle sono inattive.
030

1
@ 030 secondo il messaggio nella domanda, centos box, a differenza di quelli di Ubuntu, non imposta una password vagabonda, consentendo solo l'autenticazione con chiave
Tensibai

Risposte:


3

Il seguente file Vagrant risolve questo problema.

Puoi ottenere tutti i file chiave di supporto insieme a questo file vagabondo su 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

Questa è una risposta completamente funzionale, grazie!
Moztemur,

Spostato il repository di codici su github.com/malyabee/vagrant_ansible_lab
MalyaBee

2

Secondo i documenti si dovrebbe usare:

vagrant ssh [name|id]

Se esiste un singolo nodo, utilizzare vagrant sshe in caso di più nodi definire il nome o l'id della macchina virtuale, ad esvagrant ssh box1

Se si desidera ssh tra le caselle, è possibile creare una chiave ssh e fornire la chiave privata a ciascuna casella e aggiungere la chiave pubblica al file 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

Come useresti vagrant ssh namein una scatola? La domanda è sulla connessione di ssh da node1.local a master.local che sono entrambe macchine spin-up da vagabondo.
Tensibai,

che era già quello che era stato dichiarato sotto la tua risposta cancellata di seguito ...
Tensibai,

Aggiornerò la risposta
030

0

Prova questo link . È necessario eseguire una delle seguenti operazioni:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (se non hai disabilitato l'autenticazione basata su password)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.