AnalisiServer: differenze tra le versioni

Da GazziNet.
Vai alla navigazione Vai alla ricerca
(Creata pagina con "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" # Cambia se usi una chiave diversa OUTPUT_DIR="output" mkdir -p "$OUTPUT_DIR" w...")
 
Nessun oggetto della modifica
 
(7 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"
SSH_KEY="$HOME/.ssh/id_rsa" # Cambia se usi una chiave diversa
OUTPUT_DIR="output"
OUTPUT_DIR="output"
LOG_FILE="${OUTPUT_DIR}/log.txt"
mkdir -p "$OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR"
 
> "$LOG_FILE"
while IFS=',' read -r name ip; do
exec 3< "$SERVER_LIST"
    # Salta intestazione o righe vuote
while IFS=',' read -r name ip <&3; do
    [[ "$name" == "hostname" || -z "$ip" ]] && continue 
 
    # Pulisci spazi bianchi
     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' | 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


    ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_USER@$ip" bash << 'EOF' >> "$OUTPUT_FILE"
EOF
echo -e "\n--- CPU Info ---"
  echo "📄 File ${OUTPUT_FILE} creato."
lscpu | grep 'Model name'
done
 
exec 3<&-
echo -e "\n--- RAM Totale ---"
echo "📝 Log completo: $LOG_FILE"
free -h | grep Mem
</pre>
 
echo -e "\n--- SWAP ---"
free -h | grep Swap
 
 
echo -e "\n--- Sistema Operativo ---"
cat /etc/os-release | grep PRETTY_NAME
 
echo -e "\n--- 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 -e "\n--- Ultimo Riavvio ---"
who -b
 
echo -e "\n--- Elenco Dischi ---"
lsblk
 
echo -e "\n--- Top 5 Processi per Uso CPU ---"
ps -eo pid,comm,%cpu --sort=-%cpu | head -n 6
 
echo -e "\n--- Top 5 Processi per Uso RAM ---"
ps -eo pid,comm,%mem --sort=-%mem | head -n 6
EOF
 
    echo "📄 File ${OUTPUT_FILE} creato."
done < "$SERVER_LIST"

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"