Reorganize workspace structure with system-specific cert directories and DNS automation
This commit is contained in:
80
scripts/detect-system.sh
Executable file
80
scripts/detect-system.sh
Executable file
@@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
# Detect system type on remote host
|
||||
# Usage: ./detect-system.sh <hostname>
|
||||
|
||||
TARGET_HOST="$1"
|
||||
SSH_USER="${SSH_USER:-root}"
|
||||
SSH_PASSWORD="${SSH_PASSWORD:-}"
|
||||
|
||||
if [ -z "$TARGET_HOST" ]; then
|
||||
echo "Usage: $0 <hostname>" >&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
|
||||
Reference in New Issue
Block a user