SSH: La tua guida essenziale da riga di comando
Impara i comandi SSH pratici per login, chiavi, trasferimento file, port forwarding e configurazione host riutilizzabile.
Padroneggiare SSH: La Guida Essenziale alla Riga di Comando
Il protocollo Secure Shell (SSH) fornisce un modo crittografato per accedere a sistemi remoti, eseguire comandi e trasferire file. Se gestisci server, alcune abitudini con la riga di comando SSH rendono il tuo lavoro più veloce e sicuro.
Questa guida copre i comandi che utilizzerai più spesso: login remoto, autenticazione tramite chiave, scp, sftp, port forwarding locale e alias ~/.ssh/config.
Stabilire un Login Remoto Sicuro
L'uso più frequente di SSH è la protezione di una connessione terminale a un server remoto. La sintassi di base è semplice, ma ci sono opzioni cruciali per una maggiore sicurezza e usabilità.
Sintassi di Connessione di Base
Il comando standard richiede di specificare l'utente remoto e l'indirizzo host (IP o nome di dominio):
ssh [utente]@[host]
# Esempio:
ssh [email protected]
Specificare una Porta Non Standard
Per motivi di sicurezza, molti amministratori cambiano la porta SSH predefinita (Porta 22). Usa il flag -p per specificare un numero di porta diverso:
ssh -p 2222 [email protected]
Eseguire Comandi Remoti Singoli
SSH non si limita ad aprire una shell interattiva. Puoi eseguire un singolo comando sul server remoto e ottenere l'output localmente, il che è estremamente utile per script e controlli rapidi.
# Esegui 'ls -l' sulla directory /var/log del server remoto
ssh utente@host 'ls -l /var/log'
# Controlla l'uptime del server
ssh utente@host uptime
Gestire l'Autenticazione con le Chiavi SSH
L'autenticazione tramite password è spesso esposta ad attacchi di forza bruta. Le chiavi SSH utilizzano una chiave privata sulla tua macchina e una chiave pubblica sul server remoto, così il server può verificarti senza ricevere la tua password.
Generare Coppie di Chiavi
Se non hai già una coppia di chiavi, puoi generarne una usando ssh-keygen. È buona pratica usare una passphrase forte per proteggere la tua chiave privata.
ssh-keygen -t ed25519 -C "[email protected]"
Le chiavi RSA sono ancora comuni, specialmente per sistemi più vecchi. Per una nuova chiave su una configurazione OpenSSH moderna, Ed25519 è solitamente la scelta predefinita più semplice.
Copiare la Chiave Pubblica sul Server
L'utilità ssh-copy-id è il modo più semplice per installare la tua chiave pubblica locale nel file ~/.ssh/authorized_keys dell'utente remoto. Normalmente inserisci la password una volta, poi i login futuri possono usare la chiave.
# Copia la tua chiave pubblica predefinita sul server e imposta i permessi comuni
ssh-copy-id utente@host
Consiglio: Usare la Chiave Privata Se la tua chiave privata non si trova nella posizione predefinita (
~/.ssh/id_rsa), devi usare il flag-iper specificarne il percorso quando ti connetti:ssh -i ~/.ssh/my_custom_key utente@host
Trasferimenti di File Sicuri
SSH fornisce due strumenti principali per il trasferimento sicuro di file: scp (Secure Copy) e sftp (Secure File Transfer Protocol).
A. Usare Secure Copy (scp)
scp è ideale per trasferimenti di file semplici, rapidi e una tantum, offrendo un'interfaccia a riga di comando modellata sul comando Unix standard cp (copia).
Trasferire File da Locale a Remoto
# Sintassi: scp [file_locale] [utente]@[host]:/[percorso_remoto]
scp deployment.tar.gz utente@webserver:/var/www/uploads/
Trasferire File da Remoto a Locale
# Sintassi: scp [utente]@[host]:/[file_remoto] [percorso_locale]
scp utente@dbserver:/var/log/backup.sql .
Copiare Directory Ricorsivamente
Usa il flag -r per copiare intere strutture di directory.
scp -r ~/project_files/ utente@buildserver:/home/user/builds/
B. Usare Secure File Transfer Protocol (sftp)
sftp stabilisce una sessione interattiva, simile a un client FTP tradizionale, ma protetta tramite SSH. È più adatto per navigare directory remote, elencare file ed eseguire trasferimenti multipli all'interno di una singola sessione.
Avviare una Sessione sftp
sftp utente@host
Comandi Comuni della Sessione sftp
| Comando | Descrizione |
|---|---|
ls |
Elenca file remoti |
lls |
Elenca file locali |
get filename |
Scarica un file dal server remoto |
put filename |
Carica un file sul server remoto |
cd /path/ |
Cambia directory remota |
lcd /path/ |
Cambia directory locale |
quit |
Esce dalla sessione sftp |
SSH Tunneling con Port Forwarding Locale
L'SSH tunneling, o port forwarding, ti permette di crittografare connessioni per protocolli non sicuri o accedere a servizi su una rete interna tramite un host intermedio (jump host). La forma più comune è il Port Forwarding Locale.
Port Forwarding Locale (-L)
Il forwarding locale instrada il traffico da una porta sulla tua macchina locale a una porta specificata su un host remoto attraverso il server SSH. Questo è utile per accedere a database interni, interfacce web o servizi proprietari che non sono esposti direttamente a internet pubblico.
Scenario: Vuoi accedere a un server web interno privato (accessibile solo da jumpbox) sulla porta 80.
# Sintassi: ssh -L [porta_locale]:[host_destinazione]:[porta_destinazione] [utente]@[jumpbox]
ssh -L 8080:internal-web.lan:80 utente@jumpbox -N
-L 8080:internal-web.lan:80: Il traffico che arriva alla tua macchina locale sulla porta 8080 viene inoltrato ainternal-web.lansulla porta 80, tramitejumpbox.-N: Dice a SSH di non eseguire un comando remoto; imposta semplicemente il tunnel.
Una volta stabilita la connessione, puoi accedere al sito interno navigando dal tuo browser locale a http://localhost:8080.
Migliorare l'Efficienza con il File di Configurazione SSH
Digitare manualmente comandi SSH complessi, inclusi porte personalizzate, nomi utente e percorsi delle chiavi, è inefficiente. Il file di configurazione SSH (~/.ssh/config) ti permette di definire alias e impostazioni per server a cui accedi frequentemente.
Configurazione di Esempio (~/.ssh/config)
Crea o modifica il file ~/.ssh/config con la seguente struttura:
# Server 1: Chiave standard, porta non standard
Host dev-web
HostName 10.0.0.50
User deployment_user
Port 2222
IdentityFile ~/.ssh/id_rsa_dev
# Server 2: Accesso tramite jumpbox che richiede autenticazione con chiave
Host production-db
HostName 10.0.20.15
User sysadmin
IdentityFile ~/.ssh/prod_key
LocalForward 54320 127.0.0.1:5432
In quel secondo esempio, ssh production-db apre una porta locale sulla tua workstation. Puoi quindi puntare un client PostgreSQL a localhost:54320, e SSH trasporta il traffico a 127.0.0.1:5432 come visto dall'host remoto.
Connettersi con gli Alias
Una volta configurato, connettersi diventa drasticamente più semplice:
# Si connette a 10.0.0.50 sulla porta 2222 come deployment_user
ssh dev-web
# Si connette e imposta automaticamente il port forwarding (se configurato)
ssh production-db
Punto Chiave
Inizia con ssh utente@host, aggiungi l'autenticazione basata su chiave e sposta le opzioni ripetute in ~/.ssh/config. Una volta che queste basi sono solide, il forwarding locale con ssh -L ti fornisce un modo controllato per raggiungere servizi privati senza esporli direttamente alla rete.