Não é possível fazer o ssh em um ambiente vagabundo de várias máquinas

9

Criei um ambiente de vagabundo multi-máquina de três nós e estou tendo problemas de transferir de um vagabundo vm para outro.

Aqui está o arquivo Vagrant:

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 

O arquivo hosts (o mesmo em cada nó):

$ 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 fazer ping o dia todo de uma máquina para outra, mas não posso ssh de uma vagabunda vm para outra. A mensagem de erro típica é (do nó1 ao mestre):

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

O SSH está em execução e a porta está aberta.

O firewall não está em execução.

Estou certo de que isso tem a ver com chaves ssh. Eu admito prontamente que não sou especialista.
O que estou fazendo de errado aqui, pessoal?

HBach
fonte
Atualizada. Sim, de uma vm para a outra em um ambiente vagante. Não importa de qual vm para outro, algo não está correto.
precisa saber é o seguinte
Você precisa da chave privada do vagrant dentro da máquina, não consegue se lembrar onde está armazenado no host vagrant, mas o usuário vagrant está configurado para permitir apenas o acesso baseado em chave. (usando a chave padrão não é recomendado para fora de testes obviamente)
Tensibai
O @Tensibai One também pode fazer login sem as chaves ssh vagrant@hoste também usar vagrantcomo senha.
030
Adicione a saída de ip atodas as caixas à pergunta e verifique se os endereços IP (172.28.128.3-5) estão disponíveis quando as caixas estão inativas.
030
11
@ 030 de acordo com a mensagem na pergunta, centos caixas, ao contrário dos Ubuntu, não definir uma senha vagabundo, permitindo apenas a autenticação de chave
Tensibai

Respostas:

3

O arquivo Vagrant a seguir soluciona esse problema.

Você pode obter todos os arquivos-chave de suporte junto com este arquivo vagrant em 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
fonte
Esta é uma resposta totalmente funcional, obrigado!
moztemur 24/07/19
Movido o repositório de código para github.com/malyabee/vagrant_ansible_lab
MalyaBee
2

De acordo com os documentos, deve-se usar:

vagrant ssh [name|id]

Se houver um único nó, use vagrant sshe, no caso de vários nós, defina o nome ou o ID da VM, por exemplo,vagrant ssh box1

Se alguém quiser ssh entre as caixas, poderá criar uma chave ssh e provisionar a chave privada para cada caixa e adicionar a chave pública ao arquivo allowed_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
fonte
Como você usaria vagrant ssh namedentro de uma caixa? A questão é sobre a conexão do ssh do node1.local ao master.local, que são as duas máquinas ativadas pelo vagrant.
Tensibai
que já era o que foi declarado na sua resposta excluída abaixo ...
Tensibai 3/17
Vou atualizar a resposta
030
0

Experimente este link . Você precisa executar um dos seguintes procedimentos:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (se você não desativou a autenticação baseada em senha)
Grão de café
fonte