SSH e SCP · 5 min read · Nov 22, 2025

Utilizzare la shell sicura (SSH) per il login e la copia sicura (SCP) per il trasferimento dei dati su Linux

SSH sta per shell sicura. È un protocollo di login remoto crittografato. Una volta configurato su ciascun nodo, può essere utilizzato per comunicare con vari altri nodi in quella rete.

I principali vantaggi di SSH sono:

  • SSH utilizza l’algoritmo di crittografia RSA per generare chiavi pubbliche e private, rendendo estremamente difficile l’intrusione.
  • Poiché SSH è un protocollo di login remoto, può essere configurato su un laptop. Ciò significa che puoi utilizzare il tuo laptop per connetterti senza fili al cluster Raspberry Pi.
  • Poiché protocolli come SCP (Secure Copy) e SFTP (Secure File Transfer Protocol) funzionano sopra SSH, puoi usarli per trasferire file e cartelle direttamente da un nodo all’altro.
  • SSH supporta il login una tantum. Ciò significa che devi inserire le credenziali solo la prima volta che accedi. Dalla seconda volta in poi, non è necessario.

Iniziamo con la generazione delle chiavi SSH. Per utilizzare SSH, le chiavi devono essere generate tra due o più nodi in modo che il trasferimento dei dati possa avvenire. Utilizziamo RSA per la crittografia. Nota che su un nodo generiamo le chiavi e avrà le chiavi private o segrete. Lo stesso nodo genererà anche una chiave pubblica che sarà inviata agli altri nodi che desiderano inviare dati a questo nodo. Esegui i seguenti comandi sul nodo da cui desideri inviare dati. Chiamo questo nodo “nodo master” e gli altri nodi “nodi worker”.

cd ~  
ssh-keygen --t rsa --C "raspberrypi@raspberrypi"

Questi due comandi impostano una posizione predefinita di /home/pi/_ssh/id_rsa per memorizzare la chiave.

Se ti viene chiesto di inserire una passphrase, lascia la passphrase vuota. Una volta fatto ciò, il passo successivo è inviare le chiavi pubbliche al nodo worker. Assicurati quindi che il nodo worker sia connesso alla rete. Ora possiamo configurare le chiavi di crittografia sul nodo worker, quindi l’indirizzo IP utilizzato è l’indirizzo IP del nodo worker. Esegui il seguente comando sul nodo master.

cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir .ssh;cat >> .ssh/authorized_keys"

Una volta generate le chiavi SSH, possiamo accedere a qualsiasi altro nodo a cui le chiavi sono state inviate dal nodo master e per farlo utilizza il comando:

ssh [email protected]

Nel comando sopra, “pi” indica l’utente; per impostazione predefinita, tutti i PI che utilizzano Raspbian avranno l’utente come “pi” e “192.168.3.216” è l’IP del mio client. Dovrai cambiarlo per rappresentare l’indirizzo IP del tuo client PI.

Questo chiederà una password. Una volta effettuato l’accesso, tutti i comandi che digiti verranno eseguiti su quel nodo e non sul master, ma l’output verrà visualizzato sul master stesso. SSH può anche essere utilizzato per eseguire comandi direttamente sugli altri nodi. Ad esempio, per cambiare il nome host di diversi nodi, utilizza questi comandi in un formato come quello seguente:

ssh [email protected] 'sudo echo "cilent001" | sudo nano /etc/hostname'  
ssh [email protected] 'sudo echo "cilent002" | sudo nano /etc/hostname'  
ssh [email protected] 'sudo echo "cilent003" | sudo nano /etc/hostname'

Come mostrato sopra, possiamo utilizzare SSH per eseguire comandi su altri nodi/PI senza effettivamente accedervi. Di seguito è riportato un altro esempio per spegnere in modo sicuro un nodo nella rete con indirizzo IP 192.168.3.216

ssh [email protected] 'sudo poweroff'

La figura seguente mostra come SSH viene utilizzato per accedere a un nodo worker (192.168.3.216) e da quel nodo worker, riportare il terminale di controllo al nodo master.

Come si può vedere nella figura sopra, l’accesso a un nodo worker avviene direttamente, cioè senza inserire la password, tranne la prima volta. Ma ogni volta che il controllo del terminale torna al nodo master (192.168.3.215), devono essere inserite le credenziali di accesso. In questo modo, il master è sempre protetto da minacce esterne.

Quindi, dopo aver emesso comandi tramite SSH ad altri nodi, potrebbero esserci situazioni in cui i dati devono essere inviati a più nodi. Se il numero di nodi è ridotto, possiamo accedere manualmente a ciascun nodo, collegarlo a un display e una tastiera e inviare file. Ma questo è un modo altamente inefficiente per farlo quando la dimensione del cluster è grande. Un modo più semplice sarebbe utilizzare SCP per inviare file. Installa SCP utilizzando il comando:

sudo apt-get install scp

Si prega di notare che alcuni sistemi operativi Linux possono venire con SCP preinstallato, ma il Raspbian che stavamo utilizzando non lo aveva. Il comando generale per inviare un singolo file è:

scp (percorso del file sul dispositivo locale) [email protected] (percorso della posizione remota)

Esempio:

scp /pi/example.c [email protected] /pi/project

Qui, il dispositivo remoto a cui inviare dati è riconosciuto dall’indirizzo IP. Molti file in una directory possono essere inviati utilizzando l’opzione ricorsiva (-R). Ad esempio:

scp -r /pi/project [email protected] /pi/project

Il comando sopra trasferisce ricorsivamente tutti i file in /pi/project dall’host locale alla cartella ricorsiva nell’host remoto identificato dall’indirizzo IP.

L’immagine sottostante dimostra i vari comandi ssh e scp. Inizia elencando i contenuti della sua cartella corrente, quindi chiama “scp” ricorsivamente per trasferire tutti i file nella cartella corrente a una cartella in un altro nodo. Quindi accede all’altro nodo e mostra che scp ha trasferito con successo i contenuti nella destinazione.

SCP può essere utilizzato con alcune altre opzioni per rendere il trasferimento conforme ad alcune delle nostre condizioni. Ecco alcune opzioni:

  • Possiamo utilizzare l’opzione “-p” per preservare i tempi di modifica, i tempi di accesso e le modalità del file originale. Esempio: scp -p test.c [email protected]:~/ Qui il tempo di accesso, le modalità di accesso e l’ultimo tempo di modifica del file “test.c” saranno preservati anche nel nodo di destinazione.
  • SCP consente di comprimere i file prima che possano essere inviati attraverso la rete alla destinazione. Questo è molto utile quando il file è molto grande da trasferire, e quindi la compressione aumenterà la velocità con cui verrà inviato. Per fare ciò, utilizziamo l’opzione “-C”. Esempio: scp -pC test.c [email protected]:~/ Qui possiamo vedere che più opzioni possono essere utilizzate e entrambe le loro funzionalità saranno applicate al comando.
  • La programmazione dei socket implica l’invio e la ricezione di dati attraverso le porte e SCP può essere utilizzato per inviare dati attraverso porte specifiche all’host remoto. Questo può essere fatto utilizzando l’opzione “-P”. Esempio: scp -P 21938 test.c [email protected]:~/ Qui, la porta utilizzata per inviare dati è 1938.
  • Potrebbero esserci casi in cui non desideri conoscere lo stato del trasferimento dei file, come nell’immagine sopra. Ha senso disattivare lo stato del trasferimento quando ci sono un gran numero di file. Possiamo farlo utilizzando l’opzione “-q”. Esempio:
scp -rq ~/files [email protected]:~/files

Qui, i contenuti della cartella denominata files vengono trasferiti nella cartella files su un altro nodo, ma la barra di stato e i messaggi di debug sono tutti disabilitati, cioè non vengono visualizzati.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.