50 comandi SSH avanzati per sysadmin Linux: guida pratica

«
50 comandi SSH avanzati per sysadmin Linux con terminale e server Xlogic

Amministrare un server Linux attraverso SSH richiede molto più della conoscenza dei comandi di base. Quando si gestiscono server di produzione, hosting condivisi, VPS, server dedicati e infrastrutture con numerosi siti web, è fondamentale saper individuare rapidamente problemi di prestazioni, processi anomali, errori nei servizi, saturazione del disco e difficoltà di connessione.

In questa guida tecnica del Blog Xlogic abbiamo raccolto 50 comandi SSH avanzati e combinazioni Linux utili per amministratori di sistema, tecnici hosting e professionisti che gestiscono infrastrutture Linux.

Non troverai soltanto i classici comandi per controllare CPU e memoria: vedremo anche tunnel SSH, autenticazione tramite chiavi, analisi dei log, identificazione dei processi, controllo dei servizi systemd, verifiche SSL, ricerca di file modificati e procedure di diagnostica combinata.

Gli esempi sono pensati principalmente per distribuzioni Linux moderne, come AlmaLinux, Rocky Linux, Debian e Ubuntu, ma alcuni richiedono strumenti aggiuntivi oppure adattamenti alla configurazione del server.

Prima di iniziare: sicurezza e responsabilità

Avvertenza importante: i comandi riportati in questo articolo sono destinati a utenti con adeguate competenze tecniche. L’esecuzione di comandi SSH su server Linux può comportare rischi, soprattutto in ambienti di produzione.

Alcune operazioni possono consumare risorse, accedere a informazioni riservate, creare tunnel di rete oppure modificare file e configurazioni se vengono cambiate le opzioni utilizzate.

Chi esegue i comandi è l’unico responsabile della loro esecuzione, delle modifiche eventualmente apportate e delle conseguenze derivanti dal loro utilizzo. Xlogic non si assume responsabilità per eventuali perdite di dati, interruzioni dei servizi, problemi di sicurezza o altri danni provocati dall’utilizzo improprio dei comandi riportati.

Prima di intervenire su un server di produzione è consigliabile:

  • Verificare il nome del server sul quale si sta operando.
  • Controllare i privilegi dell’utente SSH.
  • Conoscere l’effetto delle opzioni utilizzate.
  • Verificare la disponibilità di backup aggiornati.
  • Provare le procedure più delicate in un ambiente di test.
  • Evitare modifiche non necessarie durante situazioni di emergenza.

Per verificare l’identità del server:

hostname -f

Il comando restituisce il nome host configurato. Deve essere una delle prime verifiche prima di eseguire qualsiasi attività amministrativa da terminale.

Nota: negli esempi seguenti, admin, server.example.com, web1.example.com e gli indirizzi indicati sono segnaposto. Devono essere sostituiti con utenti, hostname, percorsi e porte effettivamente autorizzati. Le operazioni locali devono essere eseguite sul server che si desidera analizzare.

Parte 1: 36 comandi SSH e Linux per amministratori di sistema

1. Connessione SSH con porta personalizzata e chiave privata

ssh -p 2222 -i ~/.ssh/id_ed25519 admin@server.example.com

Permette di collegarsi a un server specificando una porta SSH diversa da quella predefinita e una chiave privata dedicata.

L’opzione -p indica la porta del servizio SSH, mentre -i seleziona il file contenente la chiave privata.

Questa modalità è utile quando si gestiscono infrastrutture con più server e credenziali differenti. Cambiare porta, tuttavia, non sostituisce l’utilizzo di autenticazione sicura e corrette regole firewall.

2. Collegamento attraverso un server bastion

ssh -J bastion@jump.example.com admin@10.0.0.5

L’opzione -J utilizza un server intermedio, chiamato anche jump host o bastion, per raggiungere un sistema non direttamente accessibile.

È una tecnica comune nelle infrastrutture in cui i server interni non espongono pubblicamente la porta SSH.

In questo esempio, la macchina con indirizzo privato 10.0.0.5 viene raggiunta attraverso jump.example.com.

3. Creare un tunnel SSH verso un database remoto

ssh -N -L 127.0.0.1:3307:127.0.0.1:3306 admin@server.example.com

Il port forwarding locale consente di accedere a un servizio remoto attraverso una connessione SSH cifrata.

In questo caso, la porta locale 3307 viene collegata alla porta MySQL/MariaDB 3306 vista dal server remoto.

È particolarmente utile quando il database non deve essere esposto direttamente a Internet. Il tunnel non sostituisce comunque le credenziali e i permessi del database.

4. Creare un tunnel SSH inverso

ssh -N -R 9000:127.0.0.1:8080 admin@server.example.com

Il reverse tunneling rende raggiungibile dal server remoto un servizio disponibile sulla macchina locale.

La porta remota 9000 viene inoltrata al servizio locale sulla porta 8080.

Per impostazione predefinita, l’ascolto remoto è normalmente limitato all’interfaccia loopback; l’accessibilità effettiva dipende anche dalla configurazione SSH. Utilizzare questa tecnica esclusivamente per servizi autorizzati, evitando di esporre pannelli amministrativi o applicazioni sensibili.

5. Attivare un proxy SOCKS tramite SSH

ssh -N -D 127.0.0.1:1080 admin@server.example.com

Il parametro -D configura un proxy SOCKS locale, utilizzabile da applicazioni che supportano questo protocollo.

Il traffico configurato per attraversare il proxy viene instradato attraverso la connessione SSH. Questo meccanismo può essere utile per accedere in maniera controllata a servizi di una rete remota.

Non significa però che tutto il traffico del computer venga automaticamente instradato nel tunnel.

6. Mantenere attiva una sessione SSH inattiva

ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 admin@server.example.com

Questa configurazione permette al client SSH di inviare periodicamente messaggi di controllo attraverso il canale cifrato.

Se il server non risponde per il numero di verifiche previsto, la connessione viene considerata non più disponibile.

È utile per individuare sessioni interrotte o non più raggiungibili, ma non garantisce la continuità della connessione in presenza di problemi di rete.

7. Riutilizzare le connessioni SSH con ControlMaster

ssh -o ControlMaster=auto -o ControlPath=~/.ssh/cm-%C -o ControlPersist=10m admin@server.example.com

Il multiplexing SSH consente di riutilizzare una connessione già stabilita per aprire ulteriori sessioni verso lo stesso server.

È particolarmente utile per chi esegue molti comandi, trasferimenti o operazioni automatizzate in successione.

ControlPersist=10m permette di mantenere disponibile la connessione principale per un periodo limitato. La directory utilizzata per i socket deve essere protetta da permessi adeguati.

8. Installare una chiave pubblica sul server

ssh-copy-id -p 2222 -i ~/.ssh/id_ed25519.pub admin@server.example.com

Il comando ssh-copy-id facilita l’installazione di una chiave pubblica nell’account remoto.

È utile per preparare l’autenticazione SSH mediante chiave anziché utilizzare sistematicamente la password.

L’operazione modifica il file delle chiavi autorizzate dell’utente remoto, quindi deve essere eseguita soltanto su account di cui si dispone dell’autorizzazione.

9. Generare una nuova chiave SSH Ed25519

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519_sysadmin

Genera una nuova coppia di chiavi SSH Ed25519, utilizzando un nome dedicato per evitare di sovrascrivere accidentalmente la chiave predefinita.

Il parametro -a 100 aumenta il numero di round impiegati nella derivazione della chiave dalla passphrase per il formato privato OpenSSH.

È consigliabile utilizzare una passphrase robusta e conservare la chiave privata in un ambiente protetto.

10. Verificare l’impronta di una chiave SSH

ssh-keygen -lf ~/.ssh/id_ed25519_sysadmin.pub

Visualizza la fingerprint della chiave pubblica.

Questa verifica consente di identificare una chiave ed è utile per il controllo degli accessi, per documentare le chiavi installate e per confrontarle con i riferimenti amministrativi.

Attenzione: la fingerprint di una chiave utente non è la stessa cosa della fingerprint della chiave host utilizzata per verificare l’identità del server.

11. Visualizzare la configurazione SSH effettiva

ssh -G admin@server.example.com | grep -E '^(hostname|user|port|proxyjump|identityfile) '

Il comando ssh -G mostra la configurazione client risultante dopo l’elaborazione delle opzioni e dei file SSH.

Associandolo a grep possiamo visualizzare soltanto i parametri più importanti.

È uno strumento prezioso quando una connessione utilizza una porta, una chiave o un jump host diverso da quello previsto.

12. Diagnosticare una connessione SSH con il debug dettagliato

ssh -vvv admin@server.example.com

L’opzione -vvv abilita un livello elevato di diagnostica del client SSH.

Permette di analizzare problemi di autenticazione, negoziazione degli algoritmi, utilizzo delle chiavi e connessione al server.

I messaggi di debug possono contenere hostname, nomi utente e informazioni sulla configurazione. Prima di condividerli in ticket o forum pubblici è opportuno controllarne il contenuto.

13. Avviare un tunnel SSH in background

ssh -f -N -o ExitOnForwardFailure=yes -L 127.0.0.1:8081:127.0.0.1:80 admin@server.example.com

Con -f il client SSH passa in background dopo l’autenticazione, mentre -N evita l’esecuzione di una shell remota.

Il parametro ExitOnForwardFailure=yes impedisce di considerare riuscito l’avvio se il forwarding richiesto non può essere stabilito.

È utile per tunnel temporanei, purché l’amministratore tenga traccia dei processi attivi e li chiuda quando non sono più necessari.

14. Simulare una sincronizzazione remota con rsync

rsync -aHAXn --delete --itemize-changes -e "ssh -p 2222" /srv/sito/ admin@server.example.com:/srv/sito/

rsync è uno degli strumenti più utilizzati per sincronizzare file tra server Linux.

In questo esempio, -n attiva il dry-run: vengono mostrate le operazioni previste senza modificare i file di destinazione.

L’opzione --delete indica che, in un’esecuzione reale, gli elementi presenti soltanto nella destinazione verrebbero eliminati. Proprio per questo è fondamentale effettuare prima la simulazione.

Non rimuovere -n senza aver controllato accuratamente sorgente, destinazione, permessi e backup.

15. Copiare un file su un server remoto tramite SCP

scp -P 2222 /etc/hosts admin@server.example.com:/tmp/hosts-esempio

scp permette di trasferire file attraverso SSH.

Nell’esempio viene copiato il file locale /etc/hosts in una posizione temporanea sul server remoto.

È importante ricordare che in scp la porta viene specificata con -P maiuscola, a differenza di ssh, che utilizza -p minuscola.

16. Aprire una sessione SFTP sulla porta personalizzata

sftp -P 2222 admin@server.example.com

SFTP consente di gestire trasferimenti e operazioni sui file attraverso il protocollo SSH.

Può essere utilizzato per caricare, scaricare, consultare e organizzare file, secondo i permessi concessi all’utente.

È utile quando è necessario concedere accesso ai file senza predisporre un tradizionale servizio FTP non cifrato.

17. Visualizzare le porte di rete in ascolto

ss -tulpn

Il comando ss mostra le socket di rete e i relativi stati.

Le opzioni selezionano connessioni TCP e UDP, porte in ascolto, valori numerici e informazioni sui processi associati.

È uno dei primi controlli da effettuare quando un servizio non risponde o una porta risulta apparentemente occupata. Alcune informazioni sui processi richiedono privilegi amministrativi.

18. Individuare il processo che utilizza la porta HTTPS

lsof -nP -iTCP:443 -sTCP:LISTEN

lsof permette di individuare il processo che mantiene aperta una determinata socket TCP.

Nell’esempio viene verificata la porta HTTPS 443.

È utile quando si sospetta un conflitto tra servizi web, reverse proxy o applicazioni che tentano di utilizzare la stessa porta.

19. Consultare gli errori del sistema dall’ultimo avvio

journalctl -p err -b --no-pager -n 200

Visualizza fino a 200 eventi con priorità di errore o superiore registrati dal journal systemd durante l’avvio corrente.

Permette di individuare problemi che interessano servizi, kernel e componenti del sistema.

Non tutti gli errori applicativi vengono necessariamente registrati nel journal: web server, database e pannelli hosting possono utilizzare anche log dedicati.

20. Analizzare gli eventi recenti del servizio SSH

journalctl -u sshd --since "1 hour ago" --no-pager

Consente di consultare gli eventi del servizio sshd nell’ultima ora.

Può aiutare a individuare autenticazioni fallite, errori del demone SSH e problemi di avvio del servizio.

Il nome dell’unità dipende dalla distribuzione. Su alcuni sistemi, tra cui diverse installazioni Debian e Ubuntu, il servizio può chiamarsi ssh.service.

21. Individuare i servizi systemd falliti

systemctl list-units --type=service --state=failed

Mostra i servizi che systemd considera in stato di errore.

È particolarmente utile dopo un riavvio o un aggiornamento del sistema, quando alcuni servizi potrebbero non essere ripartiti correttamente.

L’assenza di servizi falliti non garantisce comunque che tutte le applicazioni funzionino: un servizio può risultare attivo ma presentare errori applicativi.

22. Leggere la configurazione systemd effettiva di un servizio

systemctl cat nginx

Visualizza il contenuto dell’unità systemd e gli eventuali file di override associati.

È utile per conoscere parametri di avvio, dipendenze, opzioni personalizzate e modifiche persistenti al comportamento di un servizio.

Nell’esempio viene utilizzato Nginx. Su un server Apache o LiteSpeed è necessario indicare il nome effettivo del servizio.

23. Individuare i servizi più lenti durante l’avvio

systemd-analyze blame

Restituisce un elenco delle unità misurate da systemd, ordinate in base al tempo necessario per la loro inizializzazione.

Può essere utile per capire perché un server impiega molto tempo ad avviarsi.

I risultati vanno interpretati con attenzione: non rappresentano sempre l’intero tempo di attesa e alcuni tipi di servizio non forniscono misurazioni significative.

24. Analizzare la catena critica di avvio del server

systemd-analyze critical-chain

Visualizza la sequenza delle unità che contribuiscono alla catena temporale critica dell’avvio.

È utile per distinguere un servizio effettivamente responsabile di un rallentamento da uno che impiega tempo a inizializzarsi ma non ritarda il completamento dell’avvio.

Il risultato è diagnostico e non modifica la configurazione del sistema.

25. Controllare spazio disco e filesystem

df -hT

Mostra lo spazio disponibile sui filesystem montati, insieme al relativo tipo.

È un controllo fondamentale quando un sito web smette di scrivere file, un database restituisce errori o le applicazioni non riescono a creare dati temporanei.

Occorre distinguere la saturazione dello spazio da quella degli inode, verificabile separatamente con df -i.

26. Individuare le directory più grandi senza attraversare altri filesystem

du -xhd1 /var | sort -h

du calcola l’occupazione delle directory, mentre sort -h ordina i risultati per dimensione.

Il parametro -x evita di attraversare filesystem differenti, mentre -d1 limita la profondità dell’analisi.

Il comando è molto utile per indagare l’aumento dello spazio occupato, ma su directory particolarmente grandi può generare un numero elevato di operazioni sul filesystem.

27. Trovare file di log superiori a 100 MB

find /var/log -type f -size +100M -printf '%s %p\n' | sort -nr | head -n 20

La combinazione individua i file regolari di grandi dimensioni presenti nella directory dei log.

La ricerca restituisce la dimensione in byte e il percorso completo, ordinando i risultati dal più grande al più piccolo.

È preferibile identificare il servizio responsabile della crescita prima di valutare qualsiasi intervento sui log. Eliminare o troncare file ancora aperti può causare problemi o non liberare immediatamente lo spazio previsto.

28. Cercare file modificati nelle ultime 24 ore

find /var/www -type f -mtime -1 -print

Elenca i file la cui data di modifica rientra approssimativamente nelle ultime 24 ore.

È utile durante le attività di troubleshooting, dopo aggiornamenti applicativi o per analizzare cambiamenti inattesi.

La semplice modifica recente di un file non dimostra la presenza di malware: aggiornamenti, cache e normali operazioni applicative possono produrre modifiche legittime.

29. Controllare permessi, proprietario e data di modifica

stat -c '%A %a %U:%G %s %y %n' /var/www/html/index.php

stat mostra informazioni dettagliate su un file.

Il formato scelto include permessi, valori numerici, proprietario, gruppo, dimensione, data di modifica e percorso.

È utile quando un’applicazione PHP restituisce errori di accesso o quando si devono confrontare le caratteristiche di file appartenenti a siti diversi.

30. Analizzare i permessi ACL di una directory

getfacl -p /var/www/html

Le ACL permettono di definire autorizzazioni più articolate rispetto ai permessi tradizionali Linux.

Il comando visualizza le ACL associate alla directory senza modificarle.

Può essere utile quando il risultato di ls -l non spiega completamente chi può accedere a un percorso. Lo strumento potrebbe richiedere l’installazione del pacchetto ACL.

31. Visualizzare i processi ordinati per consumo CPU

ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 15

Mostra i principali processi ordinati secondo l’utilizzo percentuale della CPU riportato da ps.

Oltre all’utilizzo CPU, vengono visualizzati PID, processo padre, utente, memoria, durata e comando eseguito.

È particolarmente utile sui server hosting per identificare processi PHP, database o applicazioni che consumano risorse. Il valore CPU di ps non è identico a una misurazione istantanea.

32. Ottenere una fotografia dei processi tramite top

top -b -n 1 -o %CPU | head -n 30

Avvia top in modalità batch e acquisisce una singola rilevazione, limitando le righe visualizzate.

Può essere utilizzato in script diagnostici o in sessioni SSH dove non è possibile utilizzare comodamente l’interfaccia interattiva.

Una singola rilevazione non è sempre sufficiente per individuare picchi intermittenti: in questi casi occorre raccogliere misure successive.

33. Analizzare memoria, CPU e attese I/O

vmstat 1 5

vmstat mostra statistiche su processi, memoria, swap, CPU e operazioni di I/O.

Nell’esempio vengono effettuate cinque rilevazioni con intervallo di un secondo. La prima può rappresentare statistiche cumulative dall’avvio del sistema, a seconda della piattaforma.

I valori relativi all’attesa I/O e alle operazioni di swap aiutano a distinguere problemi di CPU da possibili difficoltà di memoria o storage.

34. Analizzare le prestazioni dei dischi con iostat

iostat -xz 1 3

Questo comando produce statistiche estese delle periferiche di storage, con tre rilevazioni a intervalli di un secondo.

È utile per osservare throughput, latenza, dimensione delle code e utilizzo dei dispositivi.

Su server con RAID o storage complessi i valori devono essere interpretati insieme all’architettura sottostante. Una percentuale di utilizzo elevata, da sola, non dimostra necessariamente la saturazione dello storage.

Il programma è normalmente fornito dal pacchetto sysstat.

35. Visualizzare rapidamente le interfacce di rete

ip -br addr

Fornisce una rappresentazione sintetica delle interfacce e degli indirizzi IP configurati.

È utile sui server con molte interfacce, indirizzi aggiuntivi, VPN o reti private.

La modalità breve facilita il confronto tra configurazione attesa e stato effettivo, senza dover analizzare l’output completo del comando ip addr.

36. Consultare le regole del firewall nftables

nft list ruleset

Mostra il ruleset nftables presente nel sistema.

È uno strumento di diagnostica per verificare come vengono filtrati i pacchetti e quali regole sono attive.

Su sistemi che utilizzano CSF, iptables o altri gestori firewall, la configurazione va interpretata in base al backend realmente in uso. Il comando non sostituisce il controllo delle policy del sistema di gestione del firewall.

Parte 2: 14 combinazioni avanzate di comandi Linux

Conoscere i singoli comandi è importante, ma uno degli aspetti più utili nell’amministrazione dei server è la capacità di combinarli.

Attraverso pipe, filtri, cicli e comandi remoti possiamo ottenere rapidamente informazioni che, altrimenti, richiederebbero numerose verifiche manuali.

Le seguenti combinazioni sono orientate soprattutto alla diagnostica. Prima di utilizzarle, verificare che i percorsi, i servizi e i privilegi corrispondano all’ambiente interessato.

37. Eseguire un controllo completo delle risorse di un server remoto

ssh admin@server.example.com 'hostname -f; uptime; free -h; df -hT'

Con una sola connessione SSH vengono raccolte quattro informazioni fondamentali:

  • Hostname effettivo.
  • Tempo di attività e load average.
  • Memoria RAM disponibile e utilizzata.
  • Spazio e tipologia dei filesystem.

Questa combinazione è ideale come prima verifica quando un server sembra rallentato.

Il vantaggio principale è ottenere immediatamente un quadro generale, prima di approfondire eventuali anomalie.

38. Controllare più server Linux con un unico ciclo SSH

for HOST in web1.example.com web2.example.com web3.example.com; do
  echo "===== $HOST ====="
  ssh -o BatchMode=yes -o ConnectTimeout=5 admin@"$HOST" 'hostname -f; uptime'
done

Il ciclo for esegue una breve diagnostica su più server, uno dopo l’altro.

BatchMode=yes evita le richieste interattive di autenticazione, rendendo l’operazione più adatta a procedure automatizzate che utilizzano chiavi SSH già configurate.

Il timeout limita l’attesa in caso di host non raggiungibile.

Questa tecnica è utile per una prima verifica di un’infrastruttura composta da diversi server, senza richiedere software di orchestrazione.

39. Collegare lo stato di un servizio ai suoi errori recenti

systemctl --no-pager status nginx; journalctl -u nginx --since "30 minutes ago" --no-pager | tail -n 80

La prima parte visualizza lo stato del servizio Nginx, mentre la seconda restituisce gli ultimi eventi disponibili nell’intervallo temporale indicato.

La combinazione è particolarmente utile quando un servizio risulta attivo ma continua a restituire errori agli utenti.

Su sistemi che utilizzano Apache, LiteSpeed o altri web server è necessario sostituire nginx con il nome del servizio pertinente.

40. Individuare processi e porte HTTP/HTTPS

ss -tulpn | grep -E '(:80|:443)[[:space:]]'; lsof -nP -iTCP:443 -sTCP:LISTEN

Questa combinazione incrocia le informazioni di ss con quelle di lsof.

Permette di identificare le socket associate alle porte web e ottenere ulteriori dettagli sui processi che utilizzano HTTPS.

È utile durante la diagnosi di conflitti tra servizi, soprattutto dopo un aggiornamento o una modifica al web server.

L’output deve essere letto con attenzione sui sistemi con proxy, bilanciatori locali o più servizi in ascolto su indirizzi differenti.

41. Controllare DNS e risposta HTTP di un dominio

dig +short A example.org; dig +short AAAA example.org; curl -sSI --max-time 15 https://example.org

Questa combinazione esegue due verifiche DNS e una richiesta HTTP HEAD.

Consente di osservare gli indirizzi IPv4 e IPv6 pubblicati e controllare la risposta del sito via HTTPS.

È utile quando un dominio sembra non raggiungibile, presenta errori di risoluzione oppure risponde in maniera inattesa.

Occorre considerare che una richiesta HEAD non verifica necessariamente il corretto funzionamento di tutte le pagine e che DNS, CDN e reverse proxy possono restituire risultati differenti secondo la posizione del client.

42. Verificare la validità temporale del certificato SSL remoto

openssl s_client -connect example.org:443 -servername example.org </dev/null 2>/dev/null | openssl x509 -noout -dates -issuer -subject

La prima parte stabilisce una connessione TLS, specificando il nome del dominio tramite SNI.

La seconda estrae le informazioni principali del certificato presentato dal server, incluse le date di validità, il soggetto e l’autorità emittente.

È utile per verificare quale certificato viene effettivamente servito durante una connessione.

Importante: visualizzare il certificato non equivale a verificare completamente la catena di fiducia, la corrispondenza del nome host e tutte le condizioni di validazione TLS.

43. Individuare gli indirizzi IP con più richieste al sito

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 20

Analizza un file di access log e mostra gli indirizzi IP che compaiono più frequentemente.

È utile per individuare picchi di traffico, crawler particolarmente attivi o client che inviano numerose richieste.

Un numero elevato di richieste non dimostra automaticamente un attacco: è necessario verificare anche URL, frequenza, user agent e codici di risposta.

Il percorso del log indicato è un esempio. Su server cPanel, LiteSpeed o Apache i file possono trovarsi in directory differenti e il formato del log può cambiare.

44. Analizzare la distribuzione degli errori HTTP 5xx

awk '$9 ~ /^5[0-9][0-9]$/ {count[$9]++} END {for (code in count) print code, count[code]}' /var/log/nginx/access.log | sort -k2,2nr

La combinazione analizza i codici di stato HTTP appartenenti alla famiglia 5xx e ne conteggia le occorrenze.

È particolarmente utile per distinguere errori 500, 502, 503 e 504 durante un problema applicativo.

L’esempio presuppone un access log in formato combined, nel quale il codice HTTP è presente nel nono campo. In presenza di formati personalizzati è necessario adattare l’espressione.

Il conteggio da solo non individua la causa: occorre correlare gli eventi con i log applicativi, del web server e degli eventuali proxy.

45. Cercare errori critici nell’ultima ora

journalctl --since "1 hour ago" -p warning --no-pager | grep -Ei 'oom|failed|error|segfault' | tail -n 100

Questa combinazione interroga il journal, seleziona gli eventi con priorità warning o superiore e applica un filtro testuale.

È utile per cercare rapidamente riferimenti a processi terminati, errori applicativi, possibili problemi di memoria e segnalazioni di sistema.

Il filtro non è esaustivo: errori significativi possono utilizzare termini differenti o non comparire nel journal.

46. Analizzare spazio disco e directory più pesanti

df -hT /var; du -xhd1 /var | sort -h | tail -n 15

La prima verifica mostra lo spazio del filesystem che contiene /var.

La seconda analizza l’occupazione delle directory presenti al suo interno, evidenziando quelle più grandi.

È una combinazione utile quando si sospetta che log, cache o dati applicativi stiano saturando una partizione.

Su server con un numero elevato di file è opportuno valutare il carico I/O prima di avviare scansioni ricorsive durante gli orari di maggiore traffico.

47. Confrontare i processi che consumano CPU e memoria

echo "=== CPU ==="; ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu | head -n 12; echo "=== RAM ==="; ps -eo pid,user,%cpu,%mem,cmd --sort=-%mem | head -n 12

Il comando produce due classifiche: una ordinata per CPU e una per memoria.

È particolarmente utile quando il server presenta carico elevato e si vuole capire se il problema riguarda gli stessi processi oppure componenti differenti.

Su hosting condivisi con molti account può aiutare a individuare gli utenti o le applicazioni che richiedono ulteriori verifiche.

48. Raggruppare le connessioni di rete per stato TCP

ss -Htan | awk '{count[$1]++} END {for (state in count) print state, count[state]}' | sort -k2,2nr

Questa combinazione utilizza ss per ottenere le socket TCP e awk per raggrupparle secondo il loro stato.

Permette di osservare rapidamente quanti socket risultano, per esempio, stabiliti, in ascolto oppure in stati di chiusura.

È utile durante l’analisi di problemi di connessione o di un numero anomalo di sessioni TCP.

Per interpretare il risultato occorre conoscere il comportamento normale del servizio e considerare che alcune connessioni appartengono a client legittimi o a processi interni.

49. Individuare i file PHP modificati e verificarne la sintassi

find /var/www/html -type f -name '*.php' -mtime -1 -print0 | xargs -0 -r -n1 php -l

La combinazione individua i file PHP modificati nelle ultime 24 ore e li sottopone al controllo sintattico offerto dalla CLI PHP.

È utile dopo un aggiornamento, una distribuzione del codice o un intervento tecnico su un sito.

L’opzione -print0, insieme a xargs -0, gestisce correttamente anche nomi di file contenenti spazi o caratteri speciali.

Il controllo deve essere eseguito su codice affidabile e con la versione PHP appropriata. Un risultato sintatticamente valido non garantisce l’assenza di vulnerabilità o malware, né il corretto funzionamento dell’applicazione.

50. Confrontare gli hash di una configurazione tra più server

for HOST in web1.example.com web2.example.com; do
  echo "===== $HOST ====="
  ssh -o BatchMode=yes -o ConnectTimeout=5 admin@"$HOST" 'hostname -f; sha256sum /etc/ssh/sshd_config'
done

L’ultima combinazione permette di acquisire l’hash SHA-256 di un file di configurazione presente su più server.

Può aiutare a verificare se una configurazione attesa come identica presenta differenze tra macchine, senza trasferire il contenuto del file.

Hash diversi indicano contenuti differenti; hash uguali indicano che i contenuti corrispondono con elevata affidabilità, ma non dimostrano che la configurazione sia sicura o corretta.

Inoltre, alcuni server possono avere configurazioni legittimamente differenti. Il confronto deve quindi essere effettuato soltanto quando esiste un riferimento amministrativo preciso.

Come utilizzare questi comandi su server di produzione

La disponibilità di strumenti avanzati non significa che sia opportuno utilizzarli indiscriminatamente.

Un amministratore esperto deve adottare un metodo che permetta di raccogliere informazioni senza aggravare un problema già presente.

1. Identificare sempre il server

Prima di ogni attività SSH, verificare l’hostname e il contesto operativo. Infrastrutture con più server spesso utilizzano configurazioni simili ed è possibile confondere una macchina di produzione con un ambiente di test.

2. Privilegiare inizialmente i controlli in sola lettura

Consultare log, statistiche, configurazioni e stato dei processi è generalmente preferibile rispetto a riavviare immediatamente un servizio o modificare parametri di sistema.

Un intervento effettuato senza diagnosi può nascondere le informazioni necessarie a capire la causa del problema.

3. Prestare attenzione al consumo delle risorse

Anche i comandi che non modificano file possono consumare CPU, RAM e I/O.

Una ricerca ricorsiva su milioni di file, l’analisi di log molto grandi o un controllo approfondito dello storage possono peggiorare le prestazioni di un server già sovraccarico.

4. Distinguere problemi infrastrutturali e applicativi

Un errore HTTP 500 non indica necessariamente un problema del server fisico.

La causa può trovarsi in codice PHP, plugin WordPress, configurazioni applicative, database, permessi o limiti delle risorse.

Allo stesso modo, la presenza di file modificati di recente non costituisce automaticamente una prova di compromissione.

5. Evitare interventi distruttivi senza backup

Operazioni come eliminazioni massive, modifiche ai permessi, aggiornamenti di sistema e sincronizzazioni che prevedono la cancellazione dei file di destinazione richiedono una pianificazione specifica.

Quando uno strumento supporta la simulazione, come nel caso di rsync --dry-run, è opportuno utilizzarla prima di procedere.

Quali strumenti dovrebbero conoscere i sysadmin Linux?

I 50 esempi riportati possono essere organizzati in diverse categorie operative.

AmbitoStrumenti principaliUtilizzo
Accesso remotossh, ssh-keygen, ssh-copy-idAutenticazione e gestione delle connessioni
Trasferimento filersync, scp, sftpCopie e sincronizzazioni
Processips, top, lsofIdentificazione dei consumi e dei processi attivi
Prestazionivmstat, iostatAnalisi CPU, memoria e storage
Servizisystemctl, journalctlControllo dello stato e degli errori
Retess, ip, dig, curlDiagnostica delle connessioni e dei servizi
Filesystemfind, du, df, statAnalisi file, permessi e spazio
Sicurezzanft, openssl, sha256sumVerifiche firewall, TLS e integrità

Domande frequenti sui comandi SSH avanzati

Qual è la differenza tra SSH e i comandi Linux?

SSH è un protocollo che consente di stabilire connessioni remote cifrate e autenticare gli utenti. I comandi Linux sono invece gli strumenti eseguiti all’interno della sessione, oppure inviati direttamente al server attraverso SSH.

Per questo motivo, una guida ai comandi SSH per sysadmin comprende normalmente sia opzioni del client SSH sia strumenti Linux di amministrazione.

È necessario utilizzare l’utente root?

No. Molti controlli possono essere eseguiti da utenti non privilegiati, mentre alcune informazioni richiedono autorizzazioni amministrative.

Per motivi di sicurezza è consigliabile utilizzare il principio del privilegio minimo e ricorrere a elevazioni autorizzate soltanto quando necessario.

Quali comandi aiutano a capire perché un server è lento?

Tra i più utili troviamo uptime, top, ps, vmstat, iostat, free, df e journalctl.

È importante analizzare i risultati nel loro insieme. Un load average elevato, ad esempio, non indica da solo quale componente sia responsabile del rallentamento.

Come si controlla un problema sulla porta SSH?

È possibile utilizzare ssh -vvv dal client per analizzare la connessione e ss -tulpn sul server per controllare le porte in ascolto.

Occorre inoltre verificare le regole firewall, la raggiungibilità della rete e gli eventi del servizio SSH.

Come trovare file modificati di recente?

Il comando find permette di cercare file in base alla data di modifica, dimensione, nome e altri criteri.

La ricerca dei file recenti è utile durante una diagnosi, ma non è sufficiente per stabilire se un file sia legittimo o malevolo.

Quali comandi possono essere pericolosi?

Qualsiasi comando può avere conseguenze indesiderate se eseguito con opzioni, privilegi o percorsi sbagliati.

Richiedono particolare attenzione le operazioni di cancellazione, sincronizzazione distruttiva, modifica del firewall, riavvio dei servizi e modifica dei permessi.

Anche un comando apparentemente innocuo può introdurre problemi se viene eseguito in un ambiente di produzione senza verificarne il contesto.

Documentazione ufficiale e approfondimenti

Per comprendere tutte le opzioni disponibili e verificare eventuali differenze tra le versioni dei programmi, è consigliabile consultare la documentazione originale:

Conclusioni: conoscere Linux significa saper diagnosticare i problemi

La conoscenza dei comandi SSH avanzati è una competenza fondamentale per chi amministra server Linux e infrastrutture hosting.

Il vero vantaggio non consiste nel memorizzare centinaia di istruzioni, ma nel comprendere come combinare gli strumenti per individuare la causa di un problema senza compromettere la stabilità del sistema.

I 50 comandi SSH e le combinazioni Linux analizzati in questa guida rappresentano una base operativa per approfondire troubleshooting, osservabilità, configurazione e sicurezza.

Un buon amministratore non interviene sulla base di un singolo sintomo: verifica i dati, identifica il componente coinvolto, valuta i rischi e applica soltanto le modifiche effettivamente necessarie.

Server Linux e hosting professionale con Xlogic

La gestione di un’infrastruttura Linux richiede competenze, strumenti di monitoraggio e attenzione costante alla sicurezza.

Xlogic offre soluzioni hosting, VPS e server dedicati per progetti web professionali, con tecnologie pensate per prestazioni, affidabilità e protezione dei dati.

Se stai valutando un’infrastruttura per ospitare applicazioni, siti web o progetti aziendali, puoi consultare le nostre soluzioni disponibili sul sito ufficiale.

Scopri le soluzioni hosting Xlogic

Disclaimer finale: i comandi e gli esempi sono forniti esclusivamente a scopo informativo e formativo, senza garanzia di idoneità a specifici ambienti. L’utente è personalmente responsabile della loro esecuzione, della verifica preventiva degli effetti e della protezione dei propri sistemi e dati. Xlogic non risponde di danni o disservizi derivanti da utilizzi impropri, configurazioni errate o modifiche apportate sulla base di questa guida.

50 comandi SSH avanzati per sysadmin Linux: guida pratica ultima modifica: 2026-11-03T14:41:58+01:00 da Team tecnico Xlogic

Lascia un commento

*
*