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 -i per 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 a internal-web.lan sulla porta 80, tramite jumpbox.
  • -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.