How could I connect ansible by ssh into 2 Vagrant machines (Virtualbox Hypervisor)?

1

I would like to connect by ssh one machine with another to do ansible commands. I have a CentOS7 and want to connect inside the OS to Ubuntu16 VM.

Look at my Vagrantfile and what I tried:

Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
     vb.gui = false
     vb.memory = "4096"
     vb.cpus = "4"
  end

  config.vm.define "centos7" do |centos7|
      centos7.vm.box = "centos/7"
      centos7.vm.hostname = "centos-vm"
      centos7.vm.network "public_network", ip: "192.168.0.105"
      #centos7.vm.network "forwarded_port", guest: 8080, host: 8888
      #centos7.vm.network "forwarded_port", guest: 22, host: 2222
      centos7.vm.provision "shell", run: "always", inline: <<-SHELL
         sudo route add default gw 192.168.0.1
         sudo yum update
         sudo yum -y install wget ntpdate net-tools nano firewalld telnet

         # Install java
         sudo yum -y install epel-release
         sudo yum install java-1.8.0-openjdk-devel
         java -version

         # isntall jenkins
         curl --silent --location http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo | sudo tee /etc/yum.repos.d/jenkins.repo
         sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp

         # Install ansible
         sudo yum -y install ansible

         # Install docker
         curl -fsSL https://get.docker.com/ | sh
         sudo usermod -aG docker $USER
         sudo systemctl start docker
         sudo systemctl status docker
         sudo systemctl enable docker
         sudo ps -ef | grep dockerd
      SHELL
  end

  config.vm.define "ubuntu16" do |ubuntu16|
      ubuntu16.vm.box = "ubuntu/xenial64"
      ubuntu16.vm.hostname = "ubuntu-vm"
      ubuntu16.vm.network "public_network", ip: "192.168.0.106"
      ubuntu16.vm.provision "shell", run: "always", inline: <<-SHELL
         sudo route add default gw 192.168.0.1
         # isntall python with virtuaenv
         sudo apt-get update
         sudo apt-get install build-essential libssl-dev libffi-dev python-dev
         sudo apt install python3-pip
         sudo pip3 install virtualenv
         virtualenv -p python3 env3
         . env3/bin/activate # or source env3/bin/activate which does exactly the same thing
         # you can make sure you are now working with Python 3
         python -- version
         which python
         deactivate
         sudo apt install wget ntpdate net-tools nano default-jdk -y
         sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common telnet -y
      SHELL
  end
end

I getting this error when I try to connect by ssh:

[root@centos-vm vagrant]# ansible -m ping all
192.168.0.105 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
    "unreachable": true
}
192.168.0.106 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey).",
    "unreachable": true
}
[root@centos-vm vagrant]# ssh 192.168.0.106
Permission denied (publickey).
[root@centos-vm vagrant]# cat /etc/ansible/hosts

[servers]
192.168.0.105
192.168.0.106

vagrant@ubuntu-vm:~/.ssh$ telnet 192.168.0.105 22
Trying 192.168.0.105...
Connected to 192.168.0.105.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
^C^C^C
Connection closed by foreign host.

[vagrant@centos-vm .ssh]$ telnet 192.168.0.106
Trying 192.168.0.106...
Connected to 192.168.0.106.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.8
^C^C^C
Connection closed by foreign host.

Is there any settings that should I do at Centos VM ? Or if I have to let some default config of original Vagrantfile. Did by myself studying the documentation.

UPDATED: Changed the 2nd distro to Ubuntu 16 LTS because the box Debian 10 was getting many errors at getting packages from repo.

Marlon

Posted 2019-12-16T12:20:21.857

Reputation: 127

I find this link here on superuser but I have no clue about why I receiving this error message about permissions if both machine I can reach and do a telnet on default port of ssh. https://superuser.com/questions/615925/how-to-setup-password-less-ssh-between-two-vagrant-machines?rq=1

– Marlon – 2019-12-22T10:42:23.357

I did the 1st solution about permissions with no success. – Marlon – 2020-01-02T18:49:08.043

UPDATED: If is needed some part of the original Vagrantfile... – Marlon – 2020-01-08T14:37:47.170

SOLVED: Generate public keys for both servers, and copied to authorized_keys each other and the command for ansible -m ping ALL worked fine! – Marlon – 2020-02-15T21:08:23.877

Answers

0

I solved the issue created for both server public keys:

Did for two servers,

ssh-keygen -t RSA

So I connect Centos 7 to Ubuntu 16:
[vagrant@centos-vm .ssh]$ ssh 192.168.0.106
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-173-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


7 packages can be updated.
7 updates are security updates.

New release '18.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Feb 15 20:42:20 2020 from 192.168.0.105
vagrant@ubuntu-vm:~$

vagrant@ubuntu-vm:~/.ssh$ ssh 192.168.0.105
Last login: Sat Feb 15 20:37:28 2020 from 192.168.0.106
[vagrant@centos-vm ~]$

And finally I tested Ansible and it works fine!

[vagrant@centos-vm .ssh]$ ansible -m ping all

I believe that 2nd error is because ansible is trying to do ssh for the same host.

[vagrant@centos-vm .ssh]$ ansible -m ping all
The authenticity of host '192.168.0.105 (192.168.0.105)' can't be established.
ECDSA key fingerprint is SHA256:Dydts4hM79oPtDfElLzavhMw2SrNwu19YOcpd7bAUe0.
ECDSA key fingerprint is MD5:b1:2f:58:d0:59:28:a1:ab:a4:e4:9d:d7:b2:9c:b2:49.
Are you sure you want to continue connecting (yes/no)? 192.168.0.106 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

192.168.0.105 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Host key verification failed.",
    "unreachable": true
}

Marlon

Posted 2019-12-16T12:20:21.857

Reputation: 127