69 lines
2.1 KiB
Bash
Executable File
69 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script to list all VPN clients and their status
|
|
# Usage: ./list-clients.sh
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "ERROR: Please run as root"
|
|
exit 1
|
|
fi
|
|
|
|
WG_INTERFACE="wg0"
|
|
KEYS_DIR="/etc/wireguard/keys"
|
|
|
|
echo "========================================="
|
|
echo "VPN Clients Status"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Check if interface is up
|
|
if ! ip link show ${WG_INTERFACE} &>/dev/null; then
|
|
echo "ERROR: ${WG_INTERFACE} interface is not up"
|
|
exit 1
|
|
fi
|
|
|
|
# Get list of client keys
|
|
CLIENT_KEYS=$(ls ${KEYS_DIR}/client_*.pub 2>/dev/null | sed 's|.*/client_||; s|\.pub$||')
|
|
|
|
if [ -z "${CLIENT_KEYS}" ]; then
|
|
echo "No clients configured"
|
|
exit 0
|
|
fi
|
|
|
|
# Table header
|
|
printf "%-15s %-15s %-45s %-20s %s\n" "Client" "IP Address" "Public Key" "Latest Handshake" "Transfer"
|
|
echo "---------------------------------------------------------------------------------------------------------------------------"
|
|
|
|
for client in ${CLIENT_KEYS}; do
|
|
CLIENT_PUBKEY=$(cat "${KEYS_DIR}/client_${client}.pub")
|
|
|
|
# Get client info from wg show
|
|
CLIENT_INFO=$(wg show ${WG_INTERFACE} | grep -A 5 "${CLIENT_PUBKEY}" || echo "")
|
|
|
|
if [ -z "${CLIENT_INFO}" ]; then
|
|
# Client key exists but not in wg config (disabled)
|
|
printf "%-15s %-15s %-45s %-20s %s\n" "${client}" "N/A" "${CLIENT_PUBKEY:0:40}..." "DISABLED" "N/A"
|
|
else
|
|
# Extract details
|
|
ALLOWED_IP=$(echo "${CLIENT_INFO}" | grep "allowed ips:" | awk '{print $3}' | cut -d'/' -f1)
|
|
HANDSHAKE=$(echo "${CLIENT_INFO}" | grep "latest handshake:" | cut -d':' -f2- | xargs)
|
|
TRANSFER=$(echo "${CLIENT_INFO}" | grep "transfer:" | cut -d':' -f2- | xargs)
|
|
|
|
# Format handshake
|
|
if [ -z "${HANDSHAKE}" ]; then
|
|
HANDSHAKE="Never"
|
|
fi
|
|
|
|
# Format transfer
|
|
if [ -z "${TRANSFER}" ]; then
|
|
TRANSFER="N/A"
|
|
fi
|
|
|
|
printf "%-15s %-15s %-45s %-20s %s\n" "${client}" "${ALLOWED_IP}" "${CLIENT_PUBKEY:0:40}..." "${HANDSHAKE}" "${TRANSFER}"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Total clients: $(echo "${CLIENT_KEYS}" | wc -w)"
|
|
echo ""
|