To create a local Ansible lab using Docker containers and connect to them securely using a PEM (SSH key) authentication. This setup is ideal for learning and practicing Ansible without using cloud VMs.
sudo apt update
sudo apt updatesudo apt install -y docker.io sudo systemctl start docker sudo systemctl enable docker
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable dockersudo apt install -y ansible
sudo apt install -y ansibledocker --version ansible --version
docker --version
ansible --versionssh-keygen -t rsa -b 4096 -f ansible-key.pem
ssh-keygen -t rsa -b 4096 -f ansible-key.pemThis will generate:
ansible-key.pem (private key)ansible-key.pem.pub (public key)chmod 400 ansible-key.pem
chmod 400 ansible-key.pemdocker pull ubuntu:22.04
docker pull ubuntu:22.04docker network create ansible-lab
docker network create ansible-labdocker run -dit --name ubuntu-server-1 --hostname server1 --network ansible-lab ubuntu:22.04
docker run -dit --name ubuntu-server-1 --hostname server1 --network ansible-lab ubuntu:22.04docker run -dit --name ubuntu-server-2 --hostname server2 --network ansible-lab ubuntu:22.04
docker run -dit --name ubuntu-server-2 --hostname server2 --network ansible-lab ubuntu:22.04docker exec -it ubuntu-server-1 bash
docker exec -it ubuntu-server-1 bashapt update apt install -y openssh-server sudo mkdir /var/run/sshd
apt update
apt install -y openssh-server sudo
mkdir /var/run/sshddevopsuseradd -m -s /bin/bash devops
useradd -m -s /bin/bash devopsmkdir /home/devops/.ssh chmod 700 /home/devops/.ssh
mkdir /home/devops/.ssh
chmod 700 /home/devops/.sshPaste the content of ansible-key.pem.pub into:
/home/devops/.ssh/authorized_keys
/home/devops/.ssh/authorized_keyschmod 600 /home/devops/.ssh/authorized_keys chown -R devops:devops /home/devops/.ssh
chmod 600 /home/devops/.ssh/authorized_keys
chown -R devops:devops /home/devops/.sshEdit /etc/ssh/sshd_config and ensure the following values:
PubkeyAuthentication yes PasswordAuthentication no PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin noservice ssh start exit
service ssh start
exitRepeat steps 5 to 8 for ubuntu-server-2.
docker inspect ubuntu-server-1 | grep IPAddress docker inspect ubuntu-server-2 | grep IPAddress
docker inspect ubuntu-server-1 | grep IPAddress
docker inspect ubuntu-server-2 | grep IPAddressssh -i ansible-key.pem devops@<server-ip>
ssh -i ansible-key.pem devops@<server-ip>You now have: