linux server network

SSH (Secure Shell) and SFTP

SSH (Secure Shell) è un protocollo crittografato che permette l'accesso sicuro a un sistema remoto tramite riga di comando. È ampiamente utilizzato per amministrare server Linux, eseguire comandi remoti e trasferire file in totale sicurezza.

Screenshot about the usage of SSH in Linux.

This is a typical connection from Linux to another host, also running Linux, via SSH.

Cos'è SSH e a cosa serve

Il protocollo SSH (Secure Shell) sostituisce i vecchi protocolli insicuri come telnet e rlogin, fornendo autenticazione e crittografia completa per tutti i dati scambiati sulla rete. Opera normalmente sulla porta standard 22.

  • Accesso remoto sicuro a server e macchine Linux
  • Esecuzione remota di comandi e script
  • Trasferimento sicuro di file (scp o sftp)
  • Tunneling crittografato e port forwarding

Connessione Base

La sintassi generale del comando SSH è:

ssh username@hostname

Esempio:

ssh [email protected]

Alla prima connessione, SSH richiederà di confermare l'impronta (fingerprint) del server remoto e successivamente chiederà la password dell'utente.

Autenticazione con Chiave Pubblica

Per evitare di digitare la password ad ogni accesso e migliorare drasticamente la sicurezza, SSH supporta l'uso di una coppia di chiavi crittografiche (chiave pubblica e chiave privata).

  1. Genera una coppia di chiavi sul tuo computer:

ssh-keygen -t ed25519 -C "[email protected]"

  1. Invia la chiave pubblica al server remoto:

ssh-copy-id username@hostname

Da questo momento puoi accedere senza inserire la password, poiché l'autenticazione avverrà in modo trasparente tramite la tua chiave privata locale.

File di Configurazione SSH (~/.ssh/config)

Per velocizzare le connessioni frequenti, puoi creare o modificare il file ~/.ssh/config definendo alias pratici:

Host my-server
    HostName 192.168.1.10
    User root
    IdentityFile ~/.ssh/id_ed25519

A questo punto, ti basterà digitare semplicemente:

ssh my-server

Trasferimento File con SSH

Puoi copiare file tra il tuo computer locale e il server remoto usando scp o sftp.

Esempi con SCP:

scp file.txt [email protected]:/home/user/

scp [email protected]:/var/log/syslog ./

Oppure avvia una sessione SFTP interattiva:

sftp [email protected]

Port Forwarding (Tunneling SSH)

SSH permette di creare tunnel crittografati tra porte locali e remote, ideale per accedere a servizi o pannelli interni non esposti su Internet.

Esempio: inoltra la porta locale 8080 alla porta 80 del server remoto:

ssh -L 8080:localhost:80 user@remote_host

Ora puoi aprire http://localhost:8080 nel tuo browser locale per visualizzare il servizio remoto come se fosse in locale.

Comandi Utili

  • ssh -v — Mostra informazioni dettagliate di debug durante la connessione
  • ssh-add ~/.ssh/id_ed25519 — Aggiunge una chiave privata all'agente SSH
  • ssh-agent bash — Avvia una nuova sessione dell'agente SSH
  • exit — Chiude la sessione SSH attiva

Risoluzione dei Problemi Comuni

  • Permission denied (publickey): Controlla i permessi dei file in ~/.ssh/ (chmod 700 ~/.ssh e chmod 600 ~/.ssh/authorized_keys).
  • Connection refused: Verifica che il servizio SSH sia attivo sul server (sudo systemctl status ssh).
  • Timeout: Assicurati che la porta 22 sia aperta sul firewall.

Conclusione

SSH è uno strumento fondamentale per chiunque gestisca server Linux o infrastrutture di rete. Configurarlo correttamente garantisce la massima sicurezza e velocità operativa quotidiana.