Utilizzo e configurazione dei comandi SSH più comuni in Linux
Breve: in questa guida discuteremo i casi d'uso comuni di SSH. Discuteremo anche delle configurazioni SSH comunemente utilizzate che possono essere utilizzate nella vita quotidiana per aumentare la produttività.
Secure Shell (SSH) è un protocollo di rete ampiamente adottato, che ci consente di interagire con host remoti in modo sicuro. Fornisce sicurezza crittografando tutte le comunicazioni tra di loro.
Come utilizzare il comando SSH in Linux
In questa sezione, discuteremo alcuni dei casi d'uso più diffusi del protocollo SSH.
Esistono vari modi per interagire con host Linux remoti utilizzando protocolli come telnet, netcat, ecc. Tuttavia, questi non sono sicuri a causa dell'assenza di crittografia. Possiamo utilizzare il protocollo SSH per consentire una comunicazione sicura tra gli host.
Dobbiamo usare un client SSH per interagire con l'host remoto. Ci sono molti client basati su GUI e CLI disponibili per Linux. Tuttavia, in questa guida, utilizzeremo un'utilità della riga di comando chiamata ssh. Per impostazione predefinita, l'utilità ssh è disponibile sulla maggior parte delle distribuzioni Linux.
La sintassi del comando SSH è la seguente:
$ ssh [OPTIONS] [COMMANDS] [ARGS]
Qui, le parentesi quadre ([])
rappresentano gli argomenti opzionali mentre le parentesi angolari (<>)
rappresentano gli argomenti obbligatori.
Connettiamoci all'host remoto usando il client ssh:
$ ssh -l root 192.168.19.130
In questo esempio, abbiamo specificato il nome di accesso utilizzando l'opzione -l
e la destinazione è 192.168.19.130. La connessione SSH viene stabilita dopo aver inserito la password corretta. Ora in poi, possiamo eseguire i comandi sull'host remoto proprio come il sistema locale.
# hostname
Per terminare la sessione, possiamo usare il comando exit o la combinazione di tasti ctrl+D
.

È importante notare che dobbiamo autenticarci con l'host remoto per ogni nuova sessione. Per evitare di inserire password ogni volta, possiamo impostare un accesso senza password SSH.
Nella sezione precedente, abbiamo visto come stabilire una connessione con un host remoto, che è adatta solo quando utilizzeremo l'host remoto per una durata maggiore. A volte, abbiamo solo bisogno di eseguire uno o due comandi sull'host remoto. In questi casi, possiamo eseguire quei comandi senza creare una sessione a lungo termine.
Eseguiamo il comando hostname sull'host remoto:
$ ssh -l root 192.168.19.130 hostname
In modo simile, possiamo eseguire più comandi su una macchina Linux remota:
$ ssh -l root 192.168.19.130 'hostname; pwd'

È importante notare che i comandi devono essere racchiusi tra virgolette e separati dal punto e virgola (;)
. Se desideri eseguire comandi su più host Linux remoti, leggi il nostro articolo – Pssh – Esegui comandi su più host Linux remoti.
Simile ai comandi, possiamo anche eseguire uno script locale sull'host remoto. Capiamolo con un esempio.
Innanzitutto, crea un semplice script di shell su una macchina locale con autorizzazioni eseguibili su di essa:
$ cat script.sh hostname pwd
Ora eseguiamolo sull'host remoto:
$ ssh [email protected] 'bash -s' < ./script.sh
In questo esempio, abbiamo usato l'opzione -s
di bash per leggere lo script dallo standard input.

Lavoriamo molto spesso con i file e le directory. Un'operazione comune eseguita dagli utenti è la copia di directory e file. Proprio come le macchine locali, possiamo copiare file e directory tra gli host remoti utilizzando il comando scp, che copia i file in modo sicuro utilizzando il protocollo SSH.
Copiamo il file script.sh nella directory /tmp dell'host remoto:
$ scp script.sh [email protected]:/tmp
Ora, verifica che il file sia stato copiato:
$ ssh [email protected] 'ls /tmp/script.sh'

In modo simile, possiamo usare il comando scp per copiare le directory. Tuttavia, dobbiamo usare l'opzione -r
con il comando.
SSH supporta la compressione dei dati utilizzando l'algoritmo di compressione gzip, che comprime tutti i possibili flussi di dati come stdin, stdout, stderr e così via. Questa opzione è molto utile quando si utilizzano connessioni di rete lente.
Possiamo abilitare la compressione su SSH usando l'opzione -C
:
$ ssh -C -l root 192.168.19.130 'hostname'

Gli utenti Linux spesso hanno bisogno di eseguire il debug delle sessioni SSH per esaminare varie connessioni SSH e problemi relativi alla configurazione. In questi casi, possiamo abilitare la modalità dettagliata che stampa i log di debug della sessione corrente.
Abilitiamo la modalità dettagliata usando l'opzione -v
:
$ ssh -v -l root 192.168.19.130 hostname
In aggiunta a questo, possiamo aumentare il livello di verbosità utilizzando le opzioni multiple -v
.
-v
– imposta il livello di dettaglio su 1 e fornisce dettagli sulle attività lato client.-vv
– imposta il livello di dettaglio su 2 e fornisce dettagli sulle attività lato client e server.-vvv
– imposta il livello di dettaglio su 3 e fornisce informazioni più dettagliate sulle attività lato client e server.
Il livello di verbosità massimo supportato da SSH è 3. Vediamolo in azione:
$ ssh -vvv -l root 192.168.19.130 hostname

Nell'esempio precedente, debug1 rappresenta il messaggio di debug abilitato dal livello di verbosità 1. Allo stesso modo, debug2 e debug3 rappresentano i messaggi di debug abilitati rispettivamente dai livelli di verbosità 2 e 3.
Possiamo usare sequenze di escape con SSH per gestire le sessioni del terminale client. Discutiamo delle sequenze di escape comunemente utilizzate con i casi d'uso appropriati.
A volte, dobbiamo eseguire alcune attività sulla macchina locale senza terminare la sessione SSH corrente. In un tale scenario, possiamo sospendere la sessione corrente usando la sequenza di tasti ~ + ctrl+z
.
Innanzitutto, accedi all'host remoto ed esegui il comando hostname:
$ ssh -l root 192.168.19.130 # hostname
Quindi, per sospendere la sessione corrente, digita prima il carattere tilde (~)
e poi premi i tasti ctrl+z
. È importante notare che il carattere tilde (~)
non verrà visualizzato sullo stdout finché non si preme ctrl+z
.
Ora, verifichiamo che la sessione sia stata sospesa:
$ jobs
Qui possiamo vedere che la sessione SSH corrente è in esecuzione in background.
Riprendiamo la sessione usando il comando fg ed eseguiamo il comando hostname:
$ fg %1

Sono sicuro che devi aver visto le sessioni SSH bloccate, che si verificano quando la sessione viene interrotta da una rete instabile. Qui, non possiamo interrompere la sessione usando il comando exit. Tuttavia, possiamo terminarlo usando la sequenza di tasti \~ + .\
.
Innanzitutto, accedi all'host remoto:
$ ssh -l root 192.168.19.130
Ora usa la combinazione di tasti \~ + .\
per terminare la sessione corrente.

In questo esempio, possiamo vedere che SSH mostra il messaggio – Connessione a 192.168.19.130 chiusa.
Una cosa interessante è che esiste una sequenza di escape per elencare tutte le sequenze di escape supportate. Possiamo usare la sequenza di escape \~ + ?
per elencare le sequenze di escape supportate:

Qui, dobbiamo premere il tasto Invio per uscire dal menu di aiuto.
Come configurare SSH in Linux
In questa sezione, discuteremo della configurazione lato server per rafforzare il server SSH. Il server SSH memorizza tutta la sua configurazione nel file /etc/ssh/sshd_config. È importante notare che per aggiornare la configurazione SSH è necessario l'accesso dell'utente root.
Come best practice, dovremmo sempre visualizzare il banner prima di stabilire una connessione SSH. In alcuni casi, scoraggia gli utenti non autorizzati dall'accesso agli host remoti. Vediamo passo dopo passo come abilitare questa impostazione.
Innanzitutto, crea un file di testo su un server remoto con un messaggio di avviso:
# vi /etc/banner.txt
Successivamente, aggiungi il seguente messaggio banner:
********************************************************************* Warning !!! You are trying to log in to techmint.com's server. All the activities on this server are monitored. Terminate the session immediately if you are not an authorized user. *********************************************************************
Quindi, apri il file /etc/ssh/sshd_config e specifica il file con la direttiva Banner:
Banner /etc/banner.txt
Ora riavvia il servizio sshd e termina la sessione usando il comando exit:
# systemctl restart sshd # exit
Infine, verifica il banner accedendo all'host remoto:
$ ssh -l root 192.168.19.130

Qui, possiamo che il server visualizzi correttamente il banner SSH.
Finora, abbiamo utilizzato l'utente root per accedere all'host remoto. Tuttavia, questo è contro il principio del privilegio minimo. In un ambiente di produzione, l'accesso dell'utente root è sempre limitato per migliorare la sicurezza.
Possiamo usare la direttiva PermitRootLogin per disabilitare l'accesso dell'utente root.
Per prima cosa, apri il file /etc/ssh/sshd_config e usa l'opzione no
con la direttiva PermitRootLogin:
PermitRootLogin no
Ora riavvia il servizio sshd e termina la sessione usando il comando exit:
# systemctl restart sshd # exit
Infine, verificalo creando una nuova sessione SSH:
$ ssh -l root 192.168.19.130

Qui, possiamo osservare che non possiamo accedere all'host remoto con l'utente root. Per consentire il login dell'utente root possiamo usare l'opzione yes
con la stessa direttiva.
Per impostazione predefinita, SSH utilizza la porta TCP 22. Tuttavia, possiamo configurare SSH per l'esecuzione su una porta diversa, ad esempio 8088.
Innanzitutto, apri il file /etc/ssh/sshd_config e usa il valore 8088 con la direttiva Port:
Port 8088
Quindi, riavvia il servizio sshd e termina la sessione:
# systemctl restart sshd # exit
Ora accediamo all'host remoto:
$ ssh -p 8088 -l root 192.168.19.130

In questo esempio, abbiamo utilizzato l'opzione -p
per specificare il numero di porta.
In alcuni casi, dobbiamo eseguire alcuni altri passaggi per consentire la comunicazione su una porta non default. Come identificare le porte disponibili, l'aggiornamento delle regole del firewall, le impostazioni di Selinux, ecc.
In questo articolo abbiamo discusso del protocollo SSH e dei suoi casi d'uso comuni. Successivamente, abbiamo discusso alcune opzioni comuni. Infine, abbiamo discusso alcune delle impostazioni per proteggere il server SSH.
Conosci di altri migliori utilizzi dei comandi SSH in Linux? Facci sapere le tue opinioni nei commenti qui sotto.