#!/usr/bin/env bash HOSTS_FILE="/opt/lanx/hosts.conf" check_host() { local name="$1" local ip="$2" local user="$3" local result echo "===== $name ($ip) =====" result=$(ssh -n -o BatchMode=yes -o ConnectTimeout=5 "${user}@${ip}" \ "apt-get -s upgrade 2>/dev/null | grep '^Inst'") if [[ -z "$result" ]]; then echo "[OK] Up-to-date" else echo "[UPDATES]" echo "$result" fi echo } update_host() { local name="$1" local ip="$2" local user="$3" echo "===== $name ($ip) =====" ssh -n -o BatchMode=yes -o ConnectTimeout=5 "${user}@${ip}" \ "sudo -n apt-get update && sudo -n apt-get upgrade -y" || { echo "[FEJL] kunne ikke opdatere" } echo } autoremove_host() { local name="$1" local ip="$2" local user="$3" echo "===== $name ($ip) =====" ssh -n -o BatchMode=yes -o ConnectTimeout=5 "${user}@${ip}" \ "sudo -n apt-get autoremove -y" || { echo "[FEJL] kunne ikke køre autoremove" } echo } full_host() { local name="$1" local ip="$2" local user="$3" echo "===== $name ($ip) =====" ssh -n -o BatchMode=yes -o ConnectTimeout=5 "${user}@${ip}" \ "sudo -n apt-get update && sudo -n apt-get upgrade -y && sudo -n apt-get autoremove -y" || { echo "[FEJL] kunne ikke køre full maintenance" } echo } run_action() { local action="$1" if [[ ! -f "$HOSTS_FILE" ]]; then echo "FEJL: hosts-fil findes ikke: $HOSTS_FILE" exit 1 fi while IFS='|' read -r name ip user || [[ -n "$name" ]]; do [[ -z "$name" || "$name" =~ ^# ]] && continue case "$action" in check) check_host "$name" "$ip" "$user" ;; update) update_host "$name" "$ip" "$user" ;; autoremove) autoremove_host "$name" "$ip" "$user" ;; full) full_host "$name" "$ip" "$user" ;; *) echo "Brug: $0 {check|update|autoremove|full}" exit 1 ;; esac done < "$HOSTS_FILE" } run_action "$1"