AnalisiServer: differenze tra le versioni

Da GazziNet.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 10: Riga 10:


vi check_server_info.sh
vi check_server_info.sh
<pre>


#!/bin/bash
#!/bin/bash
SERVER_LIST="server.csv"
SERVER_LIST="server.csv"
SSH_USER="root"
SSH_USER="root"
SSH_KEY="$HOME/.ssh/id_rsa" # Cambia se usi una chiave diversa
SSH_KEY="$HOME/.ssh/id_rsa"
OUTPUT_DIR="output"
OUTPUT_DIR="output"
mkdir -p "$OUTPUT_DIR"
LOG_FILE="${OUTPUT_DIR}/log.txt"
while IFS=',' read -r name ip; do
mkdir -p "$OUTPUT_DIR"
    # Salta intestazione o righe vuote
> "$LOG_FILE"
    [[ "$name" == "hostname" || -z "$ip" ]] && continue
exec 3< "$SERVER_LIST"
    # Pulisci spazi bianchi
while IFS=',' read -r name ip <&3; do
     name=$(echo "$name" | xargs)
     name=$(echo "$name" | xargs)
     ip=$(echo "$ip" | xargs)
     ip=$(echo "$ip" | xargs)
    if [[ -z "$name" || -z "$ip" || "$name" == "hostname" ]]; then
      continue
    fi
     echo "Controllo connessione a $name ($ip)..."
     echo "Controllo connessione a $name ($ip)..."
    # Test connessione SSH con timeout breve
     ssh -i "$SSH_KEY" -o BatchMode=yes -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_USER@$ip" 'exit' 2>/dev/null
     ssh -i "$SSH_KEY" -o BatchMode=yes -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_USER@$ip" 'exit' 2>/dev/null
     if [ $? -ne 0 ]; then
     if [ $? -ne 0 ]; then
        echo "❌ Connessione fallita a $ip ($name), salto."
      echo "❌ Connessione fallita a $ip ($name), salto."
        continue
      echo "$name,$ip,FAILED" >> "$LOG_FILE"
      continue
     fi
     fi
     echo "✅ Connessione riuscita a $ip ($name). Raccolgo informazioni..."
     echo "✅ Connessione riuscita a $ip ($name). Raccolgo informazioni..."
    echo "$name,$ip,SUCCESS" >> "$LOG_FILE"
     OUTPUT_FILE="${OUTPUT_DIR}/${name}.txt"
     OUTPUT_FILE="${OUTPUT_DIR}/${name}.txt"
     echo "=== Informazioni per $name ($ip) ===" > "$OUTPUT_FILE"
     echo "=== Informazioni per $name ($ip) ===" > "$OUTPUT_FILE"
     ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_USER@$ip" bash << 'EOF' >> "$OUTPUT_FILE"
     ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_USER@$ip" bash << 'EOF' | sed '/^$/d' >> "$OUTPUT_FILE"
echo -e "\n--- CPU Info ---"
echo "--- CPU Info ---"
lscpu | grep 'Model name'
lscpu | grep 'Model name'
echo -e "\n--- RAM Totale ---"
echo "--- RAM Totale ---"
free -h | grep Mem
free -h | grep Mem
echo -e "\n--- SWAP ---"
echo "--- SWAP ---"
free -h | grep Swap
free -h | grep Swap
echo -e "\n--- Sistema Operativo ---"
echo "--- Sistema Operativo ---"
cat /etc/os-release | grep PRETTY_NAME
cat /etc/os-release | grep PRETTY_NAME
echo -e "\n--- Ultima Patch Installata ---"
echo "--- Ultima Patch Installata ---"
if command -v rpm &>/dev/null; then
if command -v rpm &>/dev/null; then
    rpm -qa --last | head -n 1
  rpm -qa --last | head -n 1
elif command -v dpkg &>/dev/null; then
elif command -v dpkg &>/dev/null; then
    ls -lt /var/lib/dpkg/info/ | head -n 1
  ls -lt /var/lib/dpkg/info/ | head -n 1
else
else
    echo "Gestore pacchetti non riconosciuto"
  echo "Gestore pacchetti non riconosciuto"
fi
fi
echo -e "\n--- Ultimo Riavvio ---"
echo "--- Ultimo Riavvio ---"
who -b
who -b
echo -e "\n--- Elenco Dischi ---"
echo "--- Elenco Dischi ---"
lsblk
lsblk
echo -e "\n--- Top 5 Processi per Uso CPU ---"
echo "--- Top 5 Processi per Uso CPU ---"
ps -eo pid,comm,%cpu --sort=-%cpu | head -n 6
ps -eo pid,comm,%cpu --sort=-%cpu | head -n 30
echo -e "\n--- Top 5 Processi per Uso RAM ---"
echo "--- Top 5 Processi per Uso RAM ---"
ps -eo pid,comm,%mem --sort=-%mem | head -n 6
ps -eo pid,comm,%mem --sort=-%mem | head -n 30
EOF
if [ "$EUID" -eq 0 ]; then
    echo "📄 File ${OUTPUT_FILE} creato."
  echo "Sei root. Mostro porte con informazioni sui processi (con -p)."
done < "$SERVER_LIST"
  if command -v ss >/dev/null 2>&1; then
    ss -tunlp
  elif command -v netstat >/dev/null 2>&1; then
    netstat -tunlp
  else
    echo "SS e netstat non sono installati."
  fi
else
  echo "Non sei root. Mostro porte senza informazioni sui processi (senza -p)."
  if command -v ss >/dev/null 2>&1; then
    ss -tunl
  elif command -v netstat >/dev/null 2>&1; then
    netstat -tunl
  else
    echo "SS e netstat non sono installati."
  fi
fi
 
EOF
  echo "📄 File ${OUTPUT_FILE} creato."
done
exec 3<&-
echo "📝 Log completo: $LOG_FILE"
</pre>

Versione attuale delle 15:17, 9 mag 2025

Generare un file server.csv:

hostname,ip
postgreslab01,192.168.1.220

Verrà usato l'ip per la connessione e il nome per il file di output nella sotto directory: output


Creare un file con lo script del collegamento ai server mediante certificati e rileva le informazioni:

vi check_server_info.sh


#!/bin/bash
SERVER_LIST="server.csv"
SSH_USER="root"
SSH_KEY="$HOME/.ssh/id_rsa"
OUTPUT_DIR="output"
LOG_FILE="${OUTPUT_DIR}/log.txt"
mkdir -p "$OUTPUT_DIR"
> "$LOG_FILE"
exec 3< "$SERVER_LIST"
while IFS=',' read -r name ip <&3; do
    name=$(echo "$name" | xargs)
    ip=$(echo "$ip" | xargs)
    if [[ -z "$name" || -z "$ip" || "$name" == "hostname" ]]; then
       continue
    fi
    echo "Controllo connessione a $name ($ip)..."
    ssh -i "$SSH_KEY" -o BatchMode=yes -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_USER@$ip" 'exit' 2>/dev/null
    if [ $? -ne 0 ]; then
       echo "❌ Connessione fallita a $ip ($name), salto."
       echo "$name,$ip,FAILED" >> "$LOG_FILE"
       continue
    fi
    echo "✅ Connessione riuscita a $ip ($name). Raccolgo informazioni..."
    echo "$name,$ip,SUCCESS" >> "$LOG_FILE"
    OUTPUT_FILE="${OUTPUT_DIR}/${name}.txt"
    echo "=== Informazioni per $name ($ip) ===" > "$OUTPUT_FILE"
    ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_USER@$ip" bash << 'EOF' | sed '/^$/d' >> "$OUTPUT_FILE"
echo "--- CPU Info ---"
lscpu | grep 'Model name'
echo "--- RAM Totale ---"
free -h | grep Mem
echo "--- SWAP ---"
free -h | grep Swap
echo "--- Sistema Operativo ---"
cat /etc/os-release | grep PRETTY_NAME
echo "--- Ultima Patch Installata ---"
if command -v rpm &>/dev/null; then
   rpm -qa --last | head -n 1
elif command -v dpkg &>/dev/null; then
   ls -lt /var/lib/dpkg/info/ | head -n 1
else
   echo "Gestore pacchetti non riconosciuto"
fi
echo "--- Ultimo Riavvio ---"
who -b
echo "--- Elenco Dischi ---"
lsblk
echo "--- Top 5 Processi per Uso CPU ---"
ps -eo pid,comm,%cpu --sort=-%cpu | head -n 30
echo "--- Top 5 Processi per Uso RAM ---"
ps -eo pid,comm,%mem --sort=-%mem | head -n 30
if [ "$EUID" -eq 0 ]; then
  echo "Sei root. Mostro porte con informazioni sui processi (con -p)."
  if command -v ss >/dev/null 2>&1; then
    ss -tunlp
  elif command -v netstat >/dev/null 2>&1; then
    netstat -tunlp
  else
    echo "SS e netstat non sono installati." 
  fi
else
  echo "Non sei root. Mostro porte senza informazioni sui processi (senza -p)."
  if command -v ss >/dev/null 2>&1; then
    ss -tunl
  elif command -v netstat >/dev/null 2>&1; then
    netstat -tunl
  else
    echo "SS e netstat non sono installati." 
  fi
fi

EOF
   echo "📄 File ${OUTPUT_FILE} creato."
done
exec 3<&-
echo "📝 Log completo: $LOG_FILE"