No se puede ssh en un entorno vagabundo de varias máquinas


9

Creé un entorno vagabundo de múltiples máquinas de tres nodos y estoy teniendo problemas para cambiar de un vm vagabundo a otro.

Aquí está el 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 

El archivo de hosts (igual en cada 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

Puedo hacer ping de un lado a otro todo el día de una máquina a otra, pero no puedo pasar de una máquina virtual a otra. El mensaje de error típico es (del nodo1 al maestro):

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

SSH se está ejecutando y el puerto está abierto.

El firewall no se está ejecutando.

Estoy seguro de que esto tiene que ver con las claves ssh. Admito que no soy un experto.
¿Qué estoy haciendo mal aquí amigos?


Actualizado. Sí, de una vm a la otra en un entorno vagabundo. No importa de qué vm a otro, algo no es correcto.
HBach

Necesita la clave privada del vagabundo dentro de la máquina, no recuerdo dónde está almacenada en el host vagabundo pero el usuario vagabundo está configurado para permitir solo el acceso basado en la clave. (obviamente, no se recomienda usar la clave predeterminada fuera de las pruebas)
Tensibai

@Tensibai One también podría iniciar sesión sin las claves ssh vagrant@hosty usar vagrantcomo contraseña también.
030

Agregue la salida de ip atodos los cuadros a la pregunta y verifique si las direcciones IP (172.28.128.3-5) están disponibles cuando los cuadros están inactivos.
030

1
@ 030 según el mensaje en la pregunta, las cajas de centos, a diferencia de las de Ubuntu, no establecen una contraseña vagabunda, permitiendo solo la autenticación de clave
Tensibai

Respuestas:


3

Después del archivo Vagrant, solucione este problema.

Puede obtener todos los archivos clave de soporte junto con este archivo vagabundo en 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

Esta es una respuesta totalmente funcional, ¡gracias!
moztemur

Se trasladó el repositorio de código a github.com/malyabee/vagrant_ansible_lab
MalyaBee

2

Según los documentos, uno debe usar:

vagrant ssh [name|id]

Si hay un solo nodo, use vagrant sshy, en el caso de varios nodos, defina el nombre o la identificación de la VM, por ejemplovagrant ssh box1

Si a uno le gustaría hacer ssh entre cuadros, podría crear una clave ssh y aprovisionar la clave privada para cada cuadro y agregar la clave pública al archivo autorizado_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

¿Cómo lo usarías vagrant ssh namedentro de una caja? La pregunta es acerca de la conexión por ssh desde node1.local a master.local, que son ambas máquinas activadas por vagabundo.
Tensibai

que ya era lo que se indicaba en su respuesta eliminada a continuación ...
Tensibai

Actualizaré la respuesta
030

0

Prueba este enlace . Debe ejecutar uno de los siguientes:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (si no ha deshabilitado la autenticación basada en contraseña)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.