Files
wehub-resource-sync 19ce5adb69
CI / Test (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Type Check (push) Waiting to run
CI / Docker Tests (push) Waiting to run
CI / Build (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 12:46:45 +08:00

152 lines
6.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# PentestGPT Setup Script
# Interactive setup for first-time Docker configuration
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
NC='\033[0m' # No Color
echo -e "${PURPLE}"
cat << "EOF"
██████╗ ███████╗███╗ ██╗████████╗███████╗███████╗████████╗ ██████╗ ██████╗ ████████╗
██╔══██╗██╔════╝████╗ ██║╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██╔════╝ ██╔══██╗╚══██╔══╝
██████╔╝█████╗ ██╔██╗ ██║ ██║ █████╗ ███████╗ ██║ ██║ ███╗██████╔╝ ██║
██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██╔══╝ ╚════██║ ██║ ██║ ██║██╔═══╝ ██║
██║ ███████╗██║ ╚████║ ██║ ███████╗███████║ ██║ ╚██████╔╝██║ ██║
╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
Setup Script v1.0.0
EOF
echo -e "${NC}"
echo -e "${BLUE}Welcome to PentestGPT setup!${NC}\n"
# Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo -e "${RED}Error: Docker is not installed.${NC}"
echo "Please install Docker first: https://docs.docker.com/get-docker/"
exit 1
fi
# Check if Docker is running
if ! docker info &> /dev/null; then
echo -e "${RED}Error: Docker is not running.${NC}"
echo "Please start Docker and try again."
exit 1
fi
echo -e "${GREEN}✓ Docker is installed and running${NC}\n"
# Check if Claude Code is installed (not strictly required since it's in Docker)
# This is just a convenience check for users who might want to use it locally
echo -e "${BLUE}Note:${NC} Claude Code CLI will be available inside the Docker container."
echo -e "You'll configure it after launching the container.\n"
# Create workspace directory with proper permissions
echo -e "${BLUE}Setting up workspace directory...${NC}"
if [ ! -d "./workspace" ]; then
mkdir -p ./workspace
echo -e "${GREEN}✓ Created workspace directory${NC}"
else
echo -e "${GREEN}✓ Workspace directory exists${NC}"
fi
# Fix workspace permissions if owned by root
if [ -d "./workspace" ] && [ "$(stat -c '%U' ./workspace 2>/dev/null || stat -f '%Su' ./workspace 2>/dev/null)" = "root" ]; then
echo -e "${BLUE}Workspace is owned by root, attempting to fix permissions...${NC}"
if sudo -n true 2>/dev/null; then
# Can use sudo without password
sudo chown -R $(id -u):$(id -g) ./workspace
echo -e "${GREEN}✓ Fixed workspace permissions${NC}"
else
# Need password for sudo
echo -e "${NC}The workspace directory is owned by root and needs permission fix.${NC}"
echo -e "${NC}Please enter your sudo password to fix permissions:${NC}"
if sudo chown -R $(id -u):$(id -g) ./workspace; then
echo -e "${GREEN}✓ Fixed workspace permissions${NC}"
else
echo -e "${RED}✗ Could not fix permissions automatically${NC}"
echo -e "${NC}Please run manually: ${PURPLE}sudo chown -R \$(id -u):\$(id -g) ./workspace${NC}"
fi
fi
fi
echo ""
# Build Docker image
echo -e "${BLUE}Building Docker image...${NC}"
echo -e "${NC}(This may take a few minutes on first run)${NC}\n"
if docker build -t pentestgpt:latest .; then
echo -e "\n${GREEN}✓ Docker image built successfully${NC}\n"
else
echo -e "\n${RED}✗ Failed to build Docker image${NC}"
exit 1
fi
# Create docker-compose.yml if it doesn't exist
if [ ! -f docker-compose.yml ]; then
echo -e "${BLUE}Creating docker-compose.yml...${NC}"
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
pentestgpt:
image: pentestgpt:latest
volumes:
- ./workspace:/workspace
stdin_open: true
tty: true
environment:
- TERM=xterm-256color
EOF
echo -e "${GREEN}✓ docker-compose.yml created${NC}\n"
fi
# Setup complete
echo -e "${GREEN}═══════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}✓ Setup complete! PentestGPT is ready to use.${NC}"
echo -e "${GREEN}═══════════════════════════════════════════════════════${NC}\n"
echo -e "${BLUE}Before First Use:${NC}"
echo -e " ${NC}1. Launch the Docker container:${NC}"
echo -e " ${PURPLE}docker compose run --rm pentestgpt${NC}\n"
echo -e " ${NC}2. Inside the container, configure Claude Code (first time only):${NC}"
echo -e " ${PURPLE}claude config${NC}"
echo -e " ${NC}(Follow the prompts to add your Anthropic API key)${NC}\n"
echo -e " ${NC}3. Run PentestGPT to solve a CTF challenge:${NC}"
echo -e " ${PURPLE}pentestgpt --target 10.10.11.234${NC}\n"
echo -e "${BLUE}Quick Start:${NC}"
echo -e " ${NC}# Solve an HTB machine${NC}"
echo -e " ${PURPLE}docker compose run --rm pentestgpt --target 10.10.11.234${NC}\n"
echo -e " ${NC}# Or enter container first (recommended for first-time setup)${NC}"
echo -e " ${PURPLE}docker compose run --rm pentestgpt${NC}"
echo -e " ${NC}# Then inside container: claude config (first time)${NC}"
echo -e " ${NC}# Then: pentestgpt --target 10.10.11.234${NC}\n"
echo -e "${BLUE}Options:${NC}"
echo -e " ${NC}--target TARGET${NC} Target CTF challenge or machine (required)"
echo -e " ${NC}--instruction TEXT${NC} Custom challenge context or hints"
echo -e " ${NC}--non-interactive${NC} Headless mode (no TUI)\n"
echo -e "${BLUE}Examples:${NC}"
echo -e " ${NC}# HTB machine${NC}"
echo -e " ${PURPLE}docker compose run --rm pentestgpt --target 10.10.11.100${NC}\n"
echo -e " ${NC}# Web CTF challenge${NC}"
echo -e " ${PURPLE}docker compose run --rm pentestgpt --target https://ctf.example.com/challenge1${NC}\n"
echo -e " ${NC}# With challenge context${NC}"
echo -e " ${PURPLE}docker compose run --rm pentestgpt --target 10.10.11.50 --instruction \"WordPress site, look for plugin vulns\"${NC}\n"
echo -e " ${NC}# Non-interactive mode${NC}"
echo -e " ${PURPLE}docker compose run --rm pentestgpt --target 10.10.11.234 --non-interactive${NC}\n"
echo -e "${GREEN}Happy flag hunting! 🚩${NC}\n"