- Added interactive username/password prompts to cert-manager.py - Removed requirement for SSH_USER environment variable prefix - Fixed password authentication in deploy-homeassistant.sh using SSHPASS environment variable - Added SSH rate limiting delays throughout deployment script - Improved error handling with SSH connection testing - Prioritized SSH_USER in detect-system.sh to avoid unnecessary root attempts - Added StrictHostKeyChecking=no for automated deployments Tool now works fully interactively - just run ./cert-manager.py and answer prompts
81 lines
2.3 KiB
Bash
Executable File
81 lines
2.3 KiB
Bash
Executable File
#!/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
|