Ricerca nel sito web

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 di tutti i giorni 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 loro.

Come utilizzare il comando SSH in Linux

In questa sezione discuteremo alcuni dei casi d'uso più diffusi del protocollo SSH.

Connettiti all'host Linux remoto

Esistono vari modi per interagire con host Linux remoti utilizzando protocolli come telnet, ftp, netcat, ecc. Tuttavia, questi non sono sicuri a causa dell'assenza di crittografia. Possiamo utilizzare il protocollo SSH per consentire la comunicazione sicura tra gli host.

Dobbiamo utilizzare un client SSH per interagire con l'host remoto. Sono disponibili numerosi client basati su GUI e CLI 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 facoltativi mentre le parentesi angolari (<>) rappresentano gli argomenti obbligatori.

Colleghiamoci all'host remoto utilizzando 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. Da ora in poi, possiamo eseguire i comandi sull'host remoto proprio come sul sistema locale.

hostname

Per terminare la sessione, possiamo utilizzare 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 ogni volta le password, possiamo impostare un accesso SSH senza password.

Esegui comandi sull'host remoto

Nella sezione precedente abbiamo visto come stabilire una connessione con un host remoto, che è adatta solo quando utilizzeremo l'host remoto per un periodo più lungo. A volte, dobbiamo solo eseguire uno o due comandi sull'host remoto. In questi casi, possiamo eseguire tali 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 carattere punto e virgola (;). Se desideri eseguire comandi su più host Linux remoti, leggi il nostro articolo – Pssh – Esegui comandi su più host Linux remoti.

Esegui lo script sull'host remoto

Analogamente ai comandi possiamo anche eseguire uno script locale sull'host remoto. Capiamolo con un esempio.

Innanzitutto, crea un semplice script di shell su un computer locale con autorizzazioni eseguibili su di esso:

cat script.sh 

hostname
pwd

Ora eseguiamolo sull'host remoto:

ssh [email  'bash -s' < ./script.sh 

In questo esempio, abbiamo utilizzato l'opzione -s della bash per leggere lo script dallo standard input.

Copia file tra gli host

Lavoriamo con file e directory molto spesso. Un'operazione comune eseguita dagli utenti è la copia di directory e file. Proprio come le macchine locali, possiamo copiare file e directory tra 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 :/tmp

Ora verifica che il file sia stato copiato:

ssh [email  '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.

Abilita la compressione per SSH

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 utilizzando l'opzione -C:

ssh -C -l root 192.168.19.130 'hostname' 

Abilita la modalità dettagliata per SSH

Gli utenti Linux spesso necessitano di eseguire il debug delle sessioni SSH per indagare su vari problemi relativi alla connessione SSH e alla configurazione. In questi casi, possiamo abilitare la modalità dettagliata che stampa i log di debug della sessione corrente.

Abilitiamo la modalità dettagliata utilizzando l'opzione -v:

ssh -v -l root 192.168.19.130 hostname

Oltre a ciò, 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 verbosità su 2 e fornisce dettagli sulle attività lato client e server.
  • -vvv – imposta il livello di verbosità su 3 e fornisce informazioni più dettagliate sulle attività lato client e server.

Il livello massimo di verbosità 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 dal livelli di verbosità 2 e 3 rispettivamente.

Sequenze di escape in SSH

Possiamo utilizzare sequenze di escape con SSH per gestire le sessioni del terminale del client. Parliamo delle sequenze di escape comunemente utilizzate con i casi d'uso appropriati.

Sospensione della sessione SSH

A volte dobbiamo eseguire alcune attività sul computer locale senza terminare la sessione SSH corrente. In uno scenario del genere, possiamo sospendere la sessione corrente utilizzando la sequenza di tasti ~ + ctrl+z.

Innanzitutto, accedi all'host remoto ed esegui il comando hostname:

ssh -l root 192.168.19.130
hostname

Successivamente, per sospendere la sessione corrente, digita prima il carattere (~) tilde e quindi 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 nuovamente la sessione utilizzando il comando fg ed eseguiamo il comando hostname:

fg %1

Termina la sessione SSH bloccata

Sono sicuro che avrai visto le sessioni SSH congelate, che si verificano quando la sessione viene interrotta da una rete instabile. In questo caso non possiamo interrompere la sessione utilizzando il comando exit. Tuttavia, possiamo terminarlo utilizzando 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.

Elenca le sequenze di escape supportate

Una cosa interessante è che esiste una sequenza di escape per elencare tutte le sequenze di escape supportate. Possiamo usare il “~ + ? ” 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.

Visualizza banner SSH

Come migliore pratica, dovremmo sempre visualizzare il banner prima di stabilire una connessione SSH. In alcuni casi, scoraggia gli utenti non autorizzati dall'accedere 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.
*********************************************************************

Successivamente, 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 utilizzando il comando exit:

systemctl restart sshd
exit

Infine, verifica il banner accedendo all'host remoto:

ssh -l root 192.168.19.130

Qui possiamo verificare che il server visualizzi correttamente il banner SSH.

Disabilita l'accesso root SSH

Finora abbiamo utilizzato l'utente root per accedere all'host remoto. Tuttavia, ciò è contrario al principio del privilegio minimo. In un ambiente di produzione, l'accesso dell'utente root è sempre limitato per migliorare la sicurezza.

Possiamo utilizzare la direttiva PermitRootLogin per disabilitare l'accesso dell'utente root.

Innanzitutto, apri il file /etc/ssh/sshd_config e utilizza l'opzione no con la direttiva PermitRootLogin:

PermitRootLogin no

Ora riavvia il servizio sshd e termina la sessione utilizzando 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 l'accesso dell'utente root possiamo utilizzare l'opzione yes con la stessa direttiva.

Modifica la porta SSH predefinita

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 utilizza il valore 8088 con la direttiva Port:

Port 8088

Successivamente, 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 predefinita. Come l'identificazione delle 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 impostazioni per proteggere il server SSH.

Conosci qualche altro miglior utilizzo dei comandi SSH in Linux? Fateci sapere le vostre opinioni nei commenti qui sotto.