Files
vpn/scripts/list-clients.sh

69 lines
2.1 KiB
Bash
Raw Normal View History

2026-02-02 20:11:05 +03:00
#!/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 ""