2. configure nodes.txt

Ansible Docker Local Lab Setup Using PEM Key

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.


1. Install Ansible and Docker on the Host Machine

Update the System

sudo apt update
sudo apt update

Install Docker

sudo 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 docker

Install Ansible

sudo apt install -y ansible
sudo apt install -y ansible

Verify Installations

docker --version
ansible --version
docker --version
ansible --version

2. Generate PEM Key for SSH Authentication

Create SSH Key Pair

ssh-keygen -t rsa -b 4096 -f ansible-key.pem
ssh-keygen -t rsa -b 4096 -f ansible-key.pem

This will generate:

Set Correct Permission for Private Key

chmod 400 ansible-key.pem
chmod 400 ansible-key.pem

3. Prepare Docker Environment

Pull Ubuntu Image

docker pull ubuntu:22.04
docker pull ubuntu:22.04

Create Docker Network

docker network create ansible-lab
docker network create ansible-lab

4. Create Ubuntu Servers as Docker Containers

Run Ubuntu Server 1

docker 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.04

Run Ubuntu Server 2

docker 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.04

5. Configure SSH Inside Containers

Access Container

docker exec -it ubuntu-server-1 bash
docker exec -it ubuntu-server-1 bash

Install SSH and Required Packages

apt update
apt install -y openssh-server sudo
mkdir /var/run/sshd
apt update
apt install -y openssh-server sudo
mkdir /var/run/sshd

6. Create SSH User

Create a User Named devops

useradd -m -s /bin/bash devops
useradd -m -s /bin/bash devops

Create SSH Directory

mkdir /home/devops/.ssh
chmod 700 /home/devops/.ssh
mkdir /home/devops/.ssh
chmod 700 /home/devops/.ssh

7. Configure PEM Key Authentication

Add Public Key

Paste the content of ansible-key.pem.pub into:

/home/devops/.ssh/authorized_keys
/home/devops/.ssh/authorized_keys

Set Correct Permissions

chmod 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/.ssh

8. Enable and Start SSH Service

Edit SSH Configuration

Edit /etc/ssh/sshd_config and ensure the following values:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no

Start SSH Service

service ssh start
exit
service ssh start
exit

9. Repeat Configuration for Second Server

Repeat steps 5 to 8 for ubuntu-server-2.


10. Get Container IP Addresses

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 IPAddress

11. SSH Into Containers Using PEM Key

ssh -i ansible-key.pem devops@<server-ip>
ssh -i ansible-key.pem devops@<server-ip>

12. Result

You now have: