SSH è un protocollo popolare ed efficace che ti consente di accedere e gestire host remoti dal tuo computer locale. Con questa guida vedremo alcuni dei comandi che si possono utilizzare per verificare la presenza di connessioni SSH attive sull’host remoto.
Nota: a seconda della configurazione del sistema, alcuni dei comandi di cui parleremo potrebbero richiedere l’accesso come root o i privilegi sudo.
1. Utilizzando il comando who
Il primo comando che può essere usato per mostrare le connessioni SSH attive è il comando who.
Il comando who viene utilizzato per mostrare chi è attualmente connesso al sistema. Ci permette di visualizzare gli utenti connessi e gli indirizzi IP di origine.
Per utilizzare il comando who è sufficiente inserire who
senza parametri.
zipixel@zpxc321:~$ who
zipixel tty7 2023-03-14 15:39 (:0)
zipixel pts/0 2023-04-11 14:20 (192.168.188.175)
zipixel@zpxc321:~$
Nell’output sopra, possiamo vedere un utente debian/mint connesso tramite tty e una sessione SSH da un indirizzo IP remoto.
È inoltre possibile aggiungere parametri al comando who per visualizzare informazioni dettagliate.
Ad esempio, per mostrare l’ultimo avvio per gli utenti connessi, aggiungi i flag -b -u
:
zipixel@zpxc321:~$ who -b -u
avvio di sistema 2023-03-14 15:27
zipixel tty7 2023-03-14 15:39 fa 2756 (:0)
zipixel pts/0 2023-04-11 14:20 . 609266 (192.168.188.175)
zipixel@zpxc321:~$ who -b -u
Il who
comando offre più opzioni per ottenere risultati personalizzati. Consulta la pagina del manuale per saperne di più.
2. Utilizzando il comando W
Il comando successivo che possiamo utilizzare per mostrare lo stato delle varie sessioni SSH e degli utenti connessi al server è il comando w. A differenza del comando who, il comando w fornisce maggiori informazioni sui processi in esecuzione per ciascun utente.
Inoltre, il comando w ti fornirà informazioni sulle connessioni SSH inattive, che sono molto utili quando devi terminarle.
Se esegui il comando senza altre opzioni, dovresti ottenere un output simile a quello qui sotto.
zipixel@zpxc321:~$ w
14:25:07 up 27 days, 21:57, 2 users, load average: 0,40, 0,44, 0,58
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
zipixel tty7 :0 14mar23 27days 34:07 2.15s cinnamon-session --session cinnamon
zipixel pts/0 192.168.188.175 14:20 1.00s 0.08s 0.01s w
zipixel@zpxc321:~$
Nell’esempio sopra, il comando w fornisce informazioni dettagliate, come il nome utente, il metodo TTY, l’indirizzo IP di origine, l’ora di accesso, il tempo di inattività e altro.
Come il comando who, puoi anche usare il comando w con vari parametri. La tabella seguente mostra i vari parametri che è possibile utilizzare con il w
comando.
Parametro | Cosa fa |
---|---|
-h, –no-header | Informa il terminale di non stampare l’intestazione |
-u, –no-current | Richiede al terminale di ignorare il nome utente poiché visualizza i processi degli utenti connessi e il tempo della CPU |
-s, –short | Indica al terminale di stampare un output abbreviato, escludendo il tempo di accesso, JCPU e PCPU |
-f, -from | Abilita/disabilita l’opzione FROM dell’output di stampa |
-help | Visualizza le varie opzioni/parametri del comando w ed esce |
-v, –version | Visualizza informazioni sulla versione ed esce |
user | Restringe i risultati all’utente specificato |
L’esempio seguente mostra il comando w utilizzato con i parametri -se -f
per mostrare un output abbreviato delle sessioni SSH correnti con la parte FROM troncata.
3. Utilizzo del comando last
Puoi anche utilizzare il comando last per mostrare tutte le sessioni SSH connesse. L’ultimo comando mostra l’elenco degli ultimi utenti che hanno effettuato l’accesso.
zipixel@zpxc321:~$ last
zipixel pts/0 192.168.188.175 Tue Apr 11 14:20 still logged in
zipixel pts/0 192.168.188.175 Sun Apr 2 21:09 - 22:16 (01:07)
zipixel pts/0 192.168.188.134 Thu Mar 30 20:57 - 23:46 (02:49)
zipixel pts/0 192.168.188.175 Sun Mar 26 14:04 - 14:05 (00:00)
zipixel pts/0 192.168.188.175 Thu Mar 23 20:48 - 23:32 (02:43)
zipixel pts/0 192.168.188.175 Thu Mar 23 15:44 - 16:44 (01:00)
zipixel pts/0 192.168.188.175 Wed Mar 22 17:02 - 17:22 (00:20)
zipixel pts/0 192.168.188.175 Tue Mar 21 22:09 - 22:31 (00:22)
zipixel pts/0 151.44.182.174 Tue Mar 21 11:32 - 13:52 (02:20)
zipixel pts/0 82.102.21.26 Tue Mar 21 09:10 - 09:20 (00:10)
zipixel pts/0 192.168.188.175 Mon Mar 20 18:42 - 23:54 (05:12)
zipixel pts/0 192.168.188.175 Mon Mar 20 16:52 - 18:07 (01:15)
zipixel pts/0 192.168.188.175 Sun Mar 19 18:19 - 19:07 (00:48)
zipixel pts/0 192.168.188.175 Fri Mar 17 22:19 - 23:58 (01:39)
zipixel pts/0 192.168.188.175 Thu Mar 16 21:37 - 00:03 (02:26)
zipixel pts/0 192.168.188.175 Thu Mar 16 15:54 - 17:01 (01:06)
zipixel pts/0 192.168.188.175 Thu Mar 16 09:41 - 11:26 (01:45)
zipixel pts/0 192.168.188.175 Wed Mar 15 23:57 - 00:00 (00:02)
zipixel pts/1 151.57.123.214 Wed Mar 15 14:01 - 16:23 (02:22)
zipixel pts/1 151.57.123.214 Wed Mar 15 13:56 - 14:01 (00:04)
zipixel pts/0 151.57.123.214 Wed Mar 15 13:38 - 15:50 (02:11)
zipixel pts/0 151.35.119.89 Wed Mar 15 10:30 - 10:30 (00:00)
zipixel pts/0 192.168.188.175 Tue Mar 14 23:29 - 23:58 (00:28)
zipixel pts/0 192.168.188.175 Tue Mar 14 21:56 - 23:29 (01:32)
zipixel pts/0 192.168.188.175 Tue Mar 14 15:39 - 18:57 (03:17)
zipixel tty7 :0 Tue Mar 14 15:39 gone - no logout
reboot system boot 5.15.0-67-generi Tue Mar 14 15:27 still running
zipixel pts/0 192.168.188.175 Tue Mar 14 15:18 - 15:20 (00:02)
Poiché l’output dell’ultimo comando è enorme, possiamo usare il comando grep per mostrare solo le sessioni attive.
Per esempio:
$ last | grep still
zipixel@zpxc321:~$ last | grep still
zipixel pts/0 192.168.188.175 Tue Apr 11 14:20 still logged in
reboot system boot 5.15.0-67-generi Tue Mar 14 15:27 still running
zipixel@zpxc321:~$
È inoltre possibile modificare l’output dell’ultimo comando per mostrare informazioni dettagliate.
Ad esempio, per mostrare i nomi utente e i domini completi, possiamo utilizzare il -w
flag.
$ last -w
Il comando last supporta numerose opzioni. Ecco le opzioni più comunemente utilizzate per l’ultimo comando.
Parametro | Cosa fa |
---|---|
-a, –hostlast | Visualizza il nome host nell’ultima colonna |
-d, –dns | Linux memorizza il nome host e l’indirizzo IP di tutti gli host remoti. Questo parametro trasforma l’IP in un nome host |
-file, –file | Informa l’ultimo comando di utilizzare un file designato diverso da /var/log/wtmp |
-F, –fulltimes | Richiede per ultimo di stampare tutte le date e gli orari di accesso e disconnessione |
-i, –ip | Simile a –dns, tranne che invece di mostrare il nome host dell’host, mostra il numero IP |
4. Utilizzo del comando netstat
Non possiamo dimenticare il netstat
comando. Netstat viene utilizzato per mostrare tutte le connessioni di rete, le interfacce di rete, le tabelle di routing e altro ancora.
Puoi anche utilizzare il comando netstat per filtrare le sessioni SSH stabilite o connesse sul tuo server Linux:
$ netstat | grep ssh
Il comando precedente mostra solo le connessioni SSH stabilite.
Per mostrare tutte le connessioni, inclusi l’ascolto e il non ascolto, possiamo usare il flag -a come:
$ netstat -a | grep ssh
5. Utilizzo del comando ss
Se vuoi avere più informazioni sulle sessioni SSH connesse, puoi usare il comando ss, che mostra i dati del socket, rendendolo simile a netstat.
Ad esempio, passiamo a grep l’output del comando ss con l’ opzione -a (all) per mostrare tutte le sessioni SSH connesse. La sintassi è:
$ ss -a | grep ssh
L’output sopra mostra tutte le connessioni SSH sull’host remoto. Ciò includerà il demone SSHD.
Per filtrare le connessioni SSH stabilite, è possibile reindirizzare l’output a grep.
$ ss -a | grep sh | grep ESTAB
I comandi precedenti restituiranno solo le connessioni SSH attive.
Il comando ss ha anche tantissime altre opzioni che puoi usare per visualizzare varie informazioni sulle connessioni al server attivo. Ad esempio, puoi utilizzare il flag -e per mostrare più informazioni sul socket.
Concludendo
È buona norma continuare a monitorare gli host remoti per gli accessi SSH non autorizzati e intraprendere le azioni necessarie, come proteggere il server o disabilitare l’autenticazione della password.