Useful Scripts

Complete collection of useful scripts for managing NazDocker Lab.

🔑 SSH Key Management Scripts

SSH Key Management Script

#!/bin/bash
# ssh-key-management.sh

ACTION=$1

case $ACTION in
    "generate")
        echo "Generating SSH host keys..."
        ./scripts/manage-ssh-keys.sh generate
        ;;
    "check")
        echo "Checking SSH key fingerprints..."
        ./scripts/manage-ssh-keys.sh check
        ;;
    "backup")
        echo "Creating SSH key backup..."
        ./scripts/manage-ssh-keys.sh backup
        ;;
    "restore")
        BACKUP_DIR=$2
        if [ -z "$BACKUP_DIR" ]; then
            echo "Usage: $0 restore <backup_directory>"
            exit 1
        fi
        echo "Restoring SSH keys from $BACKUP_DIR..."
        ./scripts/manage-ssh-keys.sh restore "$BACKUP_DIR"
        ;;
    *)
        echo "Usage: $0 {generate|check|backup|restore} [backup_directory]"
        echo "Examples:"
        echo "  $0 generate"
        echo "  $0 check"
        echo "  $0 backup"
        echo "  $0 restore backup/ssh-20231201-143022"
        ;;
esac

SSH Key Status Script

#!/bin/bash
# ssh-key-status.sh

echo "=== SSH Key Status ==="
echo ""

echo "SSH Key Files:"
ls -la config/ssh/ssh_host_* 2>/dev/null || echo "No SSH keys found"
echo ""

echo "SSH Key Fingerprints:"
if [ -f "config/ssh/ssh_host_rsa_key" ]; then
    echo "RSA:"
    ssh-keygen -lf config/ssh/ssh_host_rsa_key
fi
if [ -f "config/ssh/ssh_host_ecdsa_key" ]; then
    echo "ECDSA:"
    ssh-keygen -lf config/ssh/ssh_host_ecdsa_key
fi
if [ -f "config/ssh/ssh_host_ed25519_key" ]; then
    echo "ED25519:"
    ssh-keygen -lf config/ssh/ssh_host_ed25519_key
fi
echo ""

echo "SSH Key Permissions:"
ls -la config/ssh/ssh_host_* 2>/dev/null | awk '{print $1, $9}'
echo ""

echo "Container SSH Key Status:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu ls -la /etc/ssh/ssh_host_* 2>/dev/null || echo "Container not running"
echo ""

📊 Status Check Scripts

Ubuntu Status Check Script

#!/bin/bash
# status-check.sh

echo "=== NazDocker Lab Status ==="
echo "Container Status:"
docker-compose -f docker-compose.ubuntu.yml ps
echo ""

echo "Health Status:"
docker ps --format "table \t\t"
echo ""

echo "Recent Logs:"
docker-compose -f docker-compose.ubuntu.yml logs --tail=20 lab-environment-ubuntu
echo ""

echo "Resource Usage:"
docker stats --no-stream student-lab-ubuntu
echo ""

echo "User Accounts:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "cat /etc/passwd | grep -E ':(/bin/bash|/bin/sh)$'"

Alpine Status Check Script

#!/bin/bash
# status-check-alpine.sh

echo "=== NazDocker Lab Alpine Status ==="
echo "Container Status:"
docker-compose -f docker-compose.alpine.yml ps
echo ""

echo "Health Status:"
docker ps --format "table \t\t"
echo ""

echo "Recent Logs:"
docker-compose -f docker-compose.alpine.yml logs --tail=20 lab-environment-alpine
echo ""

echo "Resource Usage:"
docker stats --no-stream student-lab-alpine
echo ""

echo "User Accounts:"
docker-compose -f docker-compose.alpine.yml exec lab-environment-alpine bash -c "cat /etc/passwd | grep -E ':(/bin/bash|/bin/sh)$'"

Volume Management Script

#!/bin/bash
# volume-management.sh

ACTION=$1
CONTAINER_TYPE=$2

case $ACTION in
    "backup")
        if [ "$CONTAINER_TYPE" = "alpine" ]; then
            tar -czf alpine-backup-$(date +%Y%m%d-%H%M%S).tar.gz data/alpine/
            echo "Alpine backup created"
        elif [ "$CONTAINER_TYPE" = "ubuntu" ]; then
            tar -czf ubuntu-backup-$(date +%Y%m%d-%H%M%S).tar.gz data/ubuntu/
            echo "Ubuntu backup created"
        else
            tar -czf full-backup-$(date +%Y%m%d-%H%M%S).tar.gz data/
            echo "Full backup created"
        fi
        ;;
    "restore")
        if [ "$CONTAINER_TYPE" = "alpine" ]; then
            tar -xzf alpine-backup-*.tar.gz
            echo "Alpine data restored"
        elif [ "$CONTAINER_TYPE" = "ubuntu" ]; then
            tar -xzf ubuntu-backup-*.tar.gz
            echo "Ubuntu data restored"
        else
            tar -xzf full-backup-*.tar.gz
            echo "Full data restored"
        fi
        ;;
    "clean")
        if [ "$CONTAINER_TYPE" = "alpine" ]; then
            rm -rf data/alpine/*
            echo "Alpine data cleaned"
        elif [ "$CONTAINER_TYPE" = "ubuntu" ]; then
            rm -rf data/ubuntu/*
            echo "Ubuntu data cleaned"
        else
            rm -rf data/*
            echo "All data cleaned"
        fi
        ;;
    "status")
        echo "=== Volume Status ==="
        echo "Alpine data size: $(du -sh data/alpine/ 2>/dev/null || echo 'Not found')"
        echo "Ubuntu data size: $(du -sh data/ubuntu/ 2>/dev/null || echo 'Not found')"
        echo "Alpine logs size: $(du -sh logs/alpine/ 2>/dev/null || echo 'Not found')"
        echo "Ubuntu logs size: $(du -sh logs/ubuntu/ 2>/dev/null || echo 'Not found')"
        ;;
    *)
        echo "Usage: $0 {backup|restore|clean|status} [alpine|ubuntu|all]"
        echo "Examples:"
        echo "  $0 backup alpine"
        echo "  $0 restore ubuntu"
        echo "  $0 clean all"
        echo "  $0 status"
        ;;
esac

👥 User Management Scripts

User Management Script

#!/bin/bash
# user-management.sh

ACTION=$1
USERNAME=$2

case $ACTION in
    "add")
        docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
            useradd -m -s /bin/bash $USERNAME
            echo '$USERNAME:password123' | chpasswd
            echo 'User $USERNAME created with password: password123'
        "
        ;;
    "remove")
        docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
            userdel -r $USERNAME
            echo 'User $USERNAME removed'
        "
        ;;
    "list")
        docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
            cat /etc/passwd | grep -E ':(/bin/bash|/bin/sh)$'
        "
        ;;
    "password")
        docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
            echo '$USERNAME:newpassword123' | chpasswd
            echo 'Password for $USERNAME changed to: newpassword123'
        "
        ;;
    *)
        echo "Usage: $0 {add|remove|list|password} [username]"
        echo "Examples:"
        echo "  $0 add newuser"
        echo "  $0 remove olduser"
        echo "  $0 list"
        echo "  $0 password username"
        ;;
esac

User Status Script

#!/bin/bash
# user-status.sh

echo "=== User Account Status ==="
echo ""

echo "Users with shell access:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
cat /etc/passwd | grep -E ':(/bin/bash|/bin/sh)$'
"
echo ""

echo "Users with sudo access:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
getent group sudo
"
echo ""

echo "Home directory usage:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
du -sh /home/* | sort -hr
"
echo ""

echo "Recent login activity:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
tail -10 /var/log/auth.log | grep -E '(Accepted|Failed)'
"
echo ""

echo "Available Python tools:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
echo 'Python version:' && python3 --version
echo 'uv version:' && uv --version
echo 'uvx version:' && uvx --version
"

🏥 Health Monitoring Scripts

Health Monitoring Script

#!/bin/bash
# health-monitor.sh

echo "=== NazDocker Lab Health Monitor ==="
echo ""

echo "Container Health Status:"
docker ps --format "table \t\t"
echo ""

echo "Detailed Health Information:"
docker inspect student-lab-ubuntu | grep -A 20 "Health"
echo ""

echo "SSH Service Status:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu service ssh status
echo ""

echo "Recent Health Check Logs:"
docker inspect student-lab-ubuntu | grep -A 10 "Healthcheck"

Comprehensive Health Check

#!/bin/bash
# comprehensive-health-check.sh

echo "=== Comprehensive Health Check ==="
echo ""

echo "1. Container Status:"
docker-compose -f docker-compose.ubuntu.yml ps
echo ""

echo "2. Health Details:"
docker inspect student-lab-ubuntu | grep -A 20 "Health"
echo ""

echo "3. SSH Service:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu service ssh status
echo ""

echo "4. Network Connectivity:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu ping -c 1 google.com
echo ""

echo "5. User Accounts:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "cat /etc/passwd | grep -E ':(/bin/bash|/bin/sh)$'"
echo ""

echo "6. Recent SSH Logs:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu tail -5 /var/log/auth.log
echo ""

echo "7. Resource Usage:"
docker stats --no-stream student-lab-ubuntu
echo ""

echo "8. Disk Usage:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu df -h
echo ""

💾 Backup Scripts

Backup Script

#!/bin/bash
# backup-lab.sh

BACKUP_DIR="backups/$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"

echo "Creating backup in $BACKUP_DIR..."

# Backup user data
tar -czf "$BACKUP_DIR/user-data.tar.gz" data/

# Backup configuration
cp docker-compose.ubuntu.yml "$BACKUP_DIR/"
cp Dockerfile.ubuntu "$BACKUP_DIR/"
cp start.sh "$BACKUP_DIR/"

# Backup container state
docker-compose -f docker-compose.ubuntu.yml ps > "$BACKUP_DIR/container-status.txt"

echo "Backup completed: $BACKUP_DIR"

Alpine Backup Script

#!/bin/bash
# backup-lab-alpine.sh

BACKUP_DIR="backups/$(date +%Y%m%d-%H%M%S)-alpine"
mkdir -p "$BACKUP_DIR"

echo "Creating Alpine backup in $BACKUP_DIR..."

# Backup Alpine user data only
tar -czf "$BACKUP_DIR/alpine-data.tar.gz" data/alpine/

# Backup configuration
cp docker-compose.alpine.yml "$BACKUP_DIR/"
cp Dockerfile.alpine "$BACKUP_DIR/"
cp start.sh "$BACKUP_DIR/"

# Backup container state
docker-compose -f docker-compose.alpine.yml ps > "$BACKUP_DIR/container-status.txt"

echo "Alpine backup completed: $BACKUP_DIR"

Ubuntu Backup Script

#!/bin/bash
# backup-lab-ubuntu.sh

BACKUP_DIR="backups/$(date +%Y%m%d-%H%M%S)-ubuntu"
mkdir -p "$BACKUP_DIR"

echo "Creating Ubuntu backup in $BACKUP_DIR..."

# Backup Ubuntu user data only
tar -czf "$BACKUP_DIR/ubuntu-data.tar.gz" data/ubuntu/

# Backup configuration
cp docker-compose.ubuntu.yml "$BACKUP_DIR/"
cp Dockerfile.ubuntu "$BACKUP_DIR/"
cp start.sh "$BACKUP_DIR/"

# Backup container state
docker-compose -f docker-compose.ubuntu.yml ps > "$BACKUP_DIR/container-status.txt"

echo "Ubuntu backup completed: $BACKUP_DIR"

Combined Backup Script

#!/bin/bash
# backup-lab-combined.sh

BACKUP_DIR="backups/$(date +%Y%m%d-%H%M%S)-combined"
mkdir -p "$BACKUP_DIR"

echo "Creating combined backup in $BACKUP_DIR..."

# Backup all user data (both Alpine and Ubuntu)
tar -czf "$BACKUP_DIR/all-data.tar.gz" data/

# Backup Alpine data separately
tar -czf "$BACKUP_DIR/alpine-data.tar.gz" data/alpine/

# Backup Ubuntu data separately
tar -czf "$BACKUP_DIR/ubuntu-data.tar.gz" data/ubuntu/

# Backup configuration files
cp docker-compose.ubuntu.yml "$BACKUP_DIR/"
cp docker-compose.alpine.yml "$BACKUP_DIR/"
cp Dockerfile.ubuntu "$BACKUP_DIR/"
cp Dockerfile.alpine "$BACKUP_DIR/"
cp start.sh "$BACKUP_DIR/"

# Backup container states
docker-compose -f docker-compose.ubuntu.yml ps > "$BACKUP_DIR/ubuntu-container-status.txt"
docker-compose -f docker-compose.alpine.yml ps > "$BACKUP_DIR/alpine-container-status.txt"

echo "Combined backup completed: $BACKUP_DIR"

Automated Backup Script

#!/bin/bash
# automated-backup.sh

BACKUP_DIR="backups/$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"

echo "Starting automated backup at $(date)..."

# Stop container to ensure data consistency
docker-compose -f docker-compose.ubuntu.yml stop

# Backup user data
tar -czf "$BACKUP_DIR/user-data.tar.gz" data/

# Backup configuration
cp docker-compose.ubuntu.yml "$BACKUP_DIR/"
cp Dockerfile.ubuntu "$BACKUP_DIR/"
cp start.sh "$BACKUP_DIR/"

# Start container
docker-compose -f docker-compose.ubuntu.yml start

echo "Automated backup completed: $BACKUP_DIR"

🔍 Diagnostic Scripts

Quick Diagnostic Script

#!/bin/bash
# quick-diagnostic.sh

echo "=== Quick Diagnostic ==="
echo ""

echo "1. Container Status:"
docker-compose -f docker-compose.ubuntu.yml ps
echo ""

echo "2. Health Status:"
docker ps --format "table \t\t"
echo ""

echo "3. Recent Logs:"
docker-compose -f docker-compose.ubuntu.yml logs --tail=10 lab-environment-ubuntu
echo ""

echo "4. Resource Usage:"
docker stats --no-stream student-lab-ubuntu
echo ""

echo "5. SSH Service:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu service ssh status
echo ""

echo "6. Network Connectivity:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu ping -c 1 google.com
echo ""

Comprehensive Diagnostic Script

#!/bin/bash
# comprehensive-diagnostic.sh

echo "=== Comprehensive Diagnostic ==="
echo ""

echo "1. System Information:"
docker version
docker-compose --version
echo ""

echo "2. Container Details:"
docker inspect student-lab-ubuntu | grep -E "(State|Health|Mounts|NetworkSettings)"
echo ""

echo "3. Environment Variables:"
docker-compose -f docker-compose.ubuntu.yml config | grep -E "(PLAYIT_SECRET_KEY|ADMIN_PASSWORD|USER_PASSWORD|ROOT_PASSWORD)"
echo ""

echo "4. User Accounts:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "cat /etc/passwd | grep -E ':(/bin/bash|/bin/sh)$'"
echo ""

echo "5. Disk Usage:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu df -h
echo ""

echo "6. Memory Usage:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu free -h
echo ""

echo "7. Network Interfaces:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu ifconfig
echo ""

echo "8. SSH Configuration:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu cat /etc/ssh/sshd_config | grep -E "(PasswordAuthentication|PermitRootLogin|PubkeyAuthentication)"
echo ""

🚨 Emergency Scripts

Emergency Status Check

#!/bin/bash
# emergency-status.sh

echo "=== Emergency Status Check ==="
echo ""

echo "1. Container Status:"
docker ps -a
echo ""

echo "2. System Resources:"
df -h
free -h
echo ""

echo "3. Docker Service:"
sudo systemctl status docker --no-pager
echo ""

echo "4. Recent Logs:"
docker-compose -f docker-compose.ubuntu.yml logs --tail=20
echo ""

echo "5. Network Connectivity:"
ping -c 1 google.com
echo ""

Emergency Recovery Script

#!/bin/bash
# emergency-recovery.sh

echo "=== Emergency Recovery ==="
echo ""

echo "1. Stopping all containers..."
docker-compose -f docker-compose.ubuntu.yml down --remove-orphans

echo "2. Cleaning up Docker..."
docker system prune -f

echo "3. Recreating data directories..."
mkdir -p data/{admin,user1,user2,user3,user4,user5}

echo "4. Starting fresh container..."
docker-compose -f docker-compose.ubuntu.yml up -d --build

echo "5. Waiting for container to be ready..."
sleep 30

echo "6. Checking container status..."
docker-compose -f docker-compose.ubuntu.yml ps

echo "Emergency recovery completed"

📊 Monitoring Scripts

Performance Monitor

#!/bin/bash
# performance-monitor.sh

echo "=== Performance Monitor ==="
echo ""

echo "1. Container Stats:"
docker stats --no-stream student-lab-ubuntu
echo ""

echo "2. System Resources:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
echo 'CPU Usage:'
top -bn1 | grep 'Cpu(s)'
echo 'Memory Usage:'
free -h
echo 'Disk Usage:'
df -h
"
echo ""

echo "3. Network Stats:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
netstat -i
"
echo ""

echo "4. Process List:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
ps aux --sort=-%cpu | head -10
"
echo ""

Security Monitor

#!/bin/bash
# security-monitor.sh

echo "=== Security Monitor ==="
echo ""

echo "1. Recent SSH Activity:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
tail -20 /var/log/auth.log
"
echo ""

echo "2. Failed Login Attempts:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
grep 'Failed password' /var/log/auth.log | tail -10
"
echo ""

echo "3. Active Users:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
who
w
"
echo ""

echo "4. Network Connections:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
netstat -tulpn | grep ssh
"
echo ""

Python Development Monitor

#!/bin/bash
# python-dev-monitor.sh

echo "=== Python Development Monitor ==="
echo ""

echo "1. Python Environment:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
echo 'Python version:' && python3 --version
echo 'uv version:' && uv --version
echo 'uvx version:' && uvx --version
"
echo ""

echo "2. Installed Python Packages:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
pip3 list | head -20
"
echo ""

echo "3. uv Projects:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
find /home -name 'pyproject.toml' -o -name 'uv.lock' 2>/dev/null | head -10
"
echo ""

echo "4. Python Processes:"
docker-compose -f docker-compose.ubuntu.yml exec lab-environment-ubuntu bash -c "
ps aux | grep python | grep -v grep
"
echo ""

🔧 Utility Scripts

Script Installation Helper

#!/bin/bash
# install-scripts.sh

echo "=== Installing Management Scripts ==="
echo ""

# Create scripts directory
mkdir -p scripts

# Copy all scripts to scripts directory
cp status-check.sh scripts/
cp user-management.sh scripts/
cp health-monitor.sh scripts/
cp backup-lab.sh scripts/
cp quick-diagnostic.sh scripts/

# Make scripts executable
chmod +x scripts/*.sh

echo "Scripts installed in scripts/ directory"
echo "Usage: ./scripts/script-name.sh"

Script Documentation Generator

#!/bin/bash
# generate-script-docs.sh

echo "=== Script Documentation ==="
echo ""

echo "Available Scripts:"
echo ""

for script in *.sh; do
    if [ -f "$script" ]; then
        echo "## $script"
        echo ""
        echo "Description: $(head -1 "$script" | sed 's/# //')"
        echo ""
        echo "Usage: ./$script"
        echo ""
        echo "---"
        echo ""
    fi
done