Il protocollo SSH (Secure Shell) è un protocollo di rete utilizzato per la gestione remota dei sistemi operativi tramite linea di comando ed è ampiamente considerato lo standard per l’accesso remoto alle macchine *nix. Consente l’accesso sicuro a un server, l’esecuzione di comandi remoti, la gestione dei file (creazione, eliminazione, copia, ecc.) e altro ancora. La maggior parte dei provider cloud richiede SSH per accedere ai propri servizi. In questo articolo vedremo come copiare file tramite SSH su sistemi Windows e Linux.
SSH può trasmettere in modo sicuro qualsiasi tipo di dato (audio, video, dati di protocollo) attraverso un canale crittografato. A differenza di protocolli obsoleti e non sicuri come Telnet e rlogin, SSH garantisce la riservatezza e l’autenticità dei dati — elementi fondamentali per la comunicazione su Internet.
Ecco come si stabilisce una connessione sicura tra client e server:
Connessione TCP: per impostazione predefinita, il server ascolta sulla porta 22. Entrambe le parti condividono un elenco di algoritmi supportati (compressione, crittografia, scambio di chiavi) e concordano quali utilizzare.
Autenticazione: per evitare furti d’identità, entrambe le parti verificano le proprie identità utilizzando la crittografia asimmetrica (chiavi pubbliche/private). Il server viene autenticato per primo. Alla prima connessione, il client mostra un avviso con i dettagli del server. Le chiavi dei server fidati vengono memorizzate in /home/<username>/.ssh/known_hosts.
Generazione della chiave: una volta verificato il server, entrambe le parti generano una chiave simmetrica per crittografare tutti i dati scambiati.
Autenticazione dell’utente: avviene tramite password o chiave pubblica inviata dal client e memorizzata sul server in /home/<username>/.ssh/authorized_keys.
L’implementazione più popolare su Linux è OpenSSH, preinstallata nella maggior parte delle distribuzioni (Ubuntu, Debian, RHEL, ecc.). Su Windows si utilizzano client come PuTTY o MobaXterm. Da Windows 10 e Server 2019, gli strumenti OpenSSH sono disponibili nativamente.
Due strumenti principali per copiare file su Linux sono scp e sftp. Entrambi sono inclusi in OpenSSH.
SSH supporta due versioni di protocollo: 1 e 2. OpenSSH supporta entrambe, ma la versione 1 è raramente utilizzata.
Per attivare l’autocompletamento con Tab usando scp, configura l’autenticazione con chiave pubblica:
Generare una coppia di chiavi:
ssh-keygen
Esempio di output:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Per impostazione predefinita, le chiavi (id_rsa per quella privata e id_rsa.pub per quella pubblica) vengono salvate in ~/.ssh/.
Copiare la chiave pubblica sulla macchina remota:
ssh-copy-id [username]@[ip-address]
Dopo aver inserito la password dell’utente, apparirà un messaggio di conferma.
Per piccoli trasferimenti di dati (ad es. file di configurazione), scp è l’opzione ideale.
Copiare da locale a remoto:
scp test.txt user@192.168.1.29:/home/user/
Copiare più file:
scp test1.txt test2.txt user@192.168.1.29:/home/user/
Copiare da remoto a locale:
scp user@192.168.1.29:/home/user/test.txt ~/
Copiare directory:
scp -r testdir user@192.168.1.29:/home/user/
Copiare da remoto a remoto:
scp gendo@192.168.1.25:/home/gendo/test.txt user@192.168.1.29:/home/user/
SFTP è un altro strumento incluso in OpenSSH. A partire da OpenSSH 9.0, scp utilizza SFTP come impostazione predefinita al posto del vecchio protocollo SCP/RCP.
A differenza dell’FTP classico, sftp trasmette i dati crittografati attraverso un tunnel sicuro e non richiede un server FTP separato.
Esempio d’uso:
sftp misato@192.168.1.29
sftp> ls
sftp> lcd testdir/
sftp> get test.txt
sftp> bye
Gestori di file grafici come Midnight Commander e Nautilus utilizzano anch’essi sftp. In Nautilus, il server remoto appare come una cartella locale, ad esempio user@ip.
Su Windows, lo strumento da riga di comando pscp di PuTTY viene utilizzato per copiare i file.
Copiare sul server:
pscp C:\server\test.txt misato@192.168.1.29:/home/misato/
Copiare dal server:
pscp misato@192.168.1.29:/home/misato/test.txt C:\file.txt
Elencare i file sul server remoto:
pscp -ls user@192.168.1.29:/home/misato
Usare virgolette per percorsi con spazi:
pscp "C:\dir\bad file name.txt" misato@192.168.1.29:/home/misato/
Mostrare l’aiuto:
pscp
Abbiamo visto come copiare file da e verso un server utilizzando il protocollo sicuro SSH. Se lavori con server cloud, comprendere SSH è essenziale — è il metodo standard per l’accesso remoto alle macchine *nix ed è una parte fondamentale del lavoro quotidiano di DevOps e amministrazione di sistema.