Spaces:
Runtime error
Runtime error
File size: 1,488 Bytes
8c486a8 f016eb7 8c486a8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #!/usr/bin/env bash
# Level 0 NPC: SSH traffic generator (sshpass loop)
#
# Simulates admin SSH sessions -- login, run a few commands, logout.
# Generates auth log entries that Blue must distinguish from Red's SSH activity.
#
# Environment variables:
# WEB_HOST - hostname to SSH into (default: web)
# DB_HOST - secondary host (default: db)
# RATE_LAMBDA - sessions per minute (default: 2)
set -euo pipefail
WEB_HOST="${WEB_HOST:-web}"
DB_HOST="${DB_HOST:-db}"
RATE_LAMBDA="${RATE_LAMBDA:-2}"
INTERVAL=$(awk "BEGIN {printf \"%.1f\", 60.0 / $RATE_LAMBDA}")
# Admin commands that a normal sysadmin would run
COMMANDS=(
"uptime"
"df -h"
"free -m"
"tail -5 /var/log/syslog"
"ps aux | head -10"
"ls /var/www/html/"
"cat /etc/hostname"
"systemctl status nginx"
"id"
"w"
)
# Credentials for benign SSH sessions -- resolved from env or defaults
SSH_USER="${SSH_USER:-admin}"
SSH_PASS="${SSH_PASS:-Adm1n!2024}"
HOSTS=("${WEB_HOST}" "${DB_HOST}")
echo "[NPC-SSH] Starting SSH traffic at ${RATE_LAMBDA} sessions/min"
while true; do
# Pick a random host
IDX=$(( RANDOM % ${#HOSTS[@]} ))
HOST="${HOSTS[$IDX]}"
# Pick a random command
CMD_IDX=$(( RANDOM % ${#COMMANDS[@]} ))
CMD="${COMMANDS[$CMD_IDX]}"
sshpass -p "${SSH_PASS}" \
ssh -o StrictHostKeyChecking=no \
-o ConnectTimeout=5 \
"${SSH_USER}@${HOST}" \
"${CMD}" 2>/dev/null || true
sleep "${INTERVAL}"
done
|