#!/bin/bash # Detect system type on remote host # Usage: ./detect-system.sh TARGET_HOST="$1" SSH_USER="${SSH_USER:-root}" SSH_PASSWORD="${SSH_PASSWORD:-}" if [ -z "$TARGET_HOST" ]; then echo "Usage: $0 " >&2 exit 1 fi # SSH options for faster connection SSH_OPTS="-o ConnectTimeout=10 -o StrictHostKeyChecking=no" # Add BatchMode only if no password is provided if [ -z "$SSH_PASSWORD" ]; then SSH_OPTS="$SSH_OPTS -o BatchMode=yes" fi # Function to try SSH command try_ssh() { local user="$1" local command="$2" # Add small delay to avoid SSH rate limiting sleep 0.5 if [ -n "$SSH_PASSWORD" ]; then # Use sshpass if password is provided if command -v sshpass >/dev/null 2>&1; then sshpass -p "$SSH_PASSWORD" ssh $SSH_OPTS ${user}@${TARGET_HOST} "$command" 2>/dev/null else # Fallback: try without sshpass (will fail if password needed) ssh $SSH_OPTS ${user}@${TARGET_HOST} "$command" 2>/dev/null fi else ssh $SSH_OPTS ${user}@${TARGET_HOST} "$command" 2>/dev/null fi } # Try to detect system type # If SSH_USER is specified and not root, try Home Assistant first if [ "$SSH_USER" != "root" ] && [ -n "$SSH_USER" ]; then if try_ssh "$SSH_USER" "test -f /usr/bin/ha || (docker ps 2>/dev/null | grep -q homeassistant)" >/dev/null 2>&1; then echo "homeassistant:${SSH_USER}" exit 0 fi fi # Try root for standard systems if try_ssh "root" "test -f /usr/bin/pvesh" >/dev/null 2>&1; then echo "proxmox" exit 0 elif try_ssh "root" "test -f /usr/local/bin/freenas-version || test -f /usr/local/bin/truenas-version" >/dev/null 2>&1; then echo "truenas" exit 0 elif try_ssh "root" "test -f /usr/local/sbin/pfSsh.php" >/dev/null 2>&1; then echo "pfsense" exit 0 elif try_ssh "root" "test -f /usr/sbin/univention-config-registry" >/dev/null 2>&1; then echo "ucs" exit 0 fi # Try non-root users for Home Assistant if not already tried for user in icke homeassistant; do if [ "$user" = "$SSH_USER" ]; then continue # Already tried above fi if try_ssh "$user" "test -f /usr/bin/ha || (docker ps 2>/dev/null | grep -q homeassistant)" >/dev/null 2>&1; then echo "homeassistant:${user}" exit 0 fi done echo "unknown" exit 0