Impossible de ssh dans un environnement vagabond multi-machine

9

J'ai créé un environnement vagabond multi-machine à trois nœuds et j'ai des problèmes à passer d'un vm vagabond à un autre.

Voici le 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 

Le fichier hosts (identique sur chaque nœud):

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

Je peux aller et venir toute la journée de ping de n'importe quelle machine à l'autre mais je ne peux pas ssh d'un vm vagabond à l'autre. Le message d'erreur typique est (du nœud1 au maître):

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

SSH est en cours d'exécution et le port est ouvert.

Le pare-feu ne fonctionne pas.

Je suis sûr que cela a à voir avec les clés ssh. J'admets volontiers que je ne suis pas un expert.
Qu'est-ce que je fais mal ici les gens?

HBach
la source
Mise à jour. Oui, d'un vm à l'autre dans un environnement vagabond. Peu importe de quel vm à un autre, quelque chose ne va pas.
HBach le
Vous avez besoin de la clé privée de vagrant dans la machine, vous ne vous souvenez pas où il est stocké dans l'hôte vagabond, mais l'utilisateur vagabond est configuré pour n'autoriser que l'accès basé sur les clés. (l'utilisation de la clé par défaut n'est évidemment pas recommandée pour les tests)
Tensibai
@Tensibai One peut également se connecter sans les clés ssh vagrant@hostet utiliser vagrantégalement un mot de passe.
030
Veuillez ajouter la sortie de ip atoutes les cases à la question et vérifier si les adresses IP (172.28.128.3-5) sont disponibles lorsque les cases sont fermées.
030
1
@ 030 selon le message de la question, les boîtes centos, contrairement à celles d'Ubuntu, ne définissent pas de mot de passe
errant

Réponses:

3

Le fichier Vagrant suivant résout ce problème.

Vous pouvez obtenir tous les fichiers clés de prise en charge avec ce fichier vagabond à 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
la source
Ceci est une réponse entièrement fonctionnelle, merci!
moztemur
Référentiel de code déplacé vers github.com/malyabee/vagrant_ansible_lab
MalyaBee
2

Selon les documents, il faut utiliser:

vagrant ssh [name|id]

S'il n'y a qu'un seul nœud, utilisez vagrant sshet en cas de nœuds multiples définissez le nom ou l'id de la VM, par exemplevagrant ssh box1

Si l'on souhaite ssh entre les boîtes, alors on pourrait créer une clé ssh et approvisionner la clé privée à chaque boîte et ajouter la clé publique au fichier 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
030
la source
Comment utiliseriez-vous vagrant ssh namedans une boîte? La question porte sur la connexion par ssh de node1.local à master.local qui sont toutes deux des machines tournées par vagabond.
Tensibai
qui était déjà ce qui a été déclaré sous votre réponse supprimée ci-dessous ...
Tensibai
Je mettrai à jour la réponse
030
0

Essayez ce lien . Vous devez soit exécuter l'une des opérations suivantes:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (si vous n'avez pas désactivé l'authentification par mot de passe)
Grain de café
la source