In einer Umgebung mit mehreren Maschinen kann kein SSH ausgeführt werden

9

Ich habe eine Multi-Machine-Vagrant-Umgebung mit drei Knoten erstellt und habe Probleme, von einem Vagrant-VM zum anderen zu wechseln.

Hier ist das 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 

Die Hosts-Datei (auf jedem Knoten gleich):

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

Ich kann den ganzen Tag von jeder Maschine zur anderen pingen, aber ich kann nicht von einem Landstreicher zum anderen wechseln. Die typische Fehlermeldung lautet (von Knoten1 bis Master):

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

SSH läuft und der Port ist offen.

Die Firewall wird nicht ausgeführt.

Ich bin sicher, das hat mit SSH-Schlüsseln zu tun. Ich gebe gerne zu, dass ich kein Experte bin.
Was mache ich hier falsch, Leute?

HBach
quelle
Aktualisiert. Ja, von einem VM zum anderen in einer vagabundierenden Umgebung. Es spielt keine Rolle, von welchem ​​VM zum anderen, etwas stimmt nicht.
HBach
Sie benötigen den privaten Schlüssel von vagrant auf dem Computer. Sie können sich nicht erinnern, wo er auf dem vagrant-Host gespeichert ist, aber der Benutzer von vagrant ist so konfiguriert, dass nur schlüsselbasierter Zugriff möglich ist. (Die Verwendung des Standardschlüssels wird aus Tests offensichtlich nicht empfohlen.)
Tensibai
@Tensibai Man kann sich auch ohne die Schlüssel anmelden ssh vagrant@hostund auch vagrantals Passwort verwenden.
030
Bitte fügen Sie ip ader Frage die Ausgabe aller Felder hinzu und prüfen Sie, ob die IP-Adressen (172.28.128.3-5) verfügbar sind, wenn die Felder nicht verfügbar sind.
030
1
@ 030 Laut der Nachricht in der Frage legen Centos-Boxen im Gegensatz zu Ubuntu-Boxen kein vagabundierendes Passwort fest und erlauben nur die Schlüsselauthentifizierung
Tensibai,

Antworten:

3

Die folgende Vagrant-Datei behebt dieses Problem.

Sie können alle unterstützenden Schlüsseldateien zusammen mit dieser Vagabunddatei unter https://github.com/malyabee/IaaC/tree/master/ansible_lab herunterladen

$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
quelle
Dies ist eine voll funktionsfähige Antwort, danke!
Moztemur
Das Code-Repository wurde nach github.com/malyabee/vagrant_ansible_lab
verschoben
2

Laut den Dokumenten sollte man verwenden:

vagrant ssh [name|id]

Wenn es einen einzelnen Knoten gibt, verwenden Sie vagrant sshund definieren Sie bei mehreren Knoten den Namen oder die ID der VM, zvagrant ssh box1

Wenn man zwischen Boxen ssh möchte, kann man einen ssh-Schlüssel erstellen und den privaten Schlüssel für jede Box bereitstellen und den öffentlichen Schlüssel zur Datei "authorized_keys" hinzufügen.

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
quelle
Wie würden Sie vagrant ssh namein einer Box verwenden? Die Frage betrifft die Verbindung von ssh von node1.local zu master.local, die beide Maschinen sind, die von vagrant gedreht werden.
Tensibai
Das war bereits das, was unter Ihrer gelöschten Antwort unten angegeben wurde ...
Tensibai
Ich werde die Antwort aktualisieren
030
0

Versuchen Sie diesen Link . Sie müssen entweder eine der folgenden Aktionen ausführen:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (wenn Sie die kennwortbasierte Authentifizierung nicht deaktiviert haben)
Kaffeebohne
quelle