Cosa fa#
Protocollo e client per l'accesso remoto cifrato. Permette di comandare una macchina remota (guest) dal proprio terminale locale (host) garantendo riservatezza e integrità dei dati tramite crittografia asimmetrica.
Sintassi#
ssh [opzioni] utente@host
Comandi essenziali#
| Comando | Cosa fa | Note Blue Team |
|---|---|---|
ssh barno@192.168.65.2 | Connessione base via IP. | Porta di default: 22. |
ssh -i ~/.ssh/id_ed25519 barno@host | Connessione con chiave specifica. | Forza l'identità (Identity file). |
ssh-keygen -t ed25519 | Genera chiavi moderne. | ed25519 è più sicuro e veloce di RSA. |
ssh-copy-id -i ~/.pub barno@host | Copia la chiave pubblica sul server. | Metodo standard per abilitare il login senza password. |
ssh barno@IP -p 2222 -i ~/.ssh/id_ed25519 | Connessione con porta e chiave specifiche. | Usare porta non standard riduce il rumore dei bot. |
Analisi e Debug#
# Cercare un flag specifico nel manuale (es. -i) senza scorrere tutto
man ssh | grep -A 5 "\-i "
# Verificare chi è attualmente connesso al server
whoScenario Reale: Docker & PostgreSQL#
Quando gestisci database dentro container, ricorda che localhost sul server remoto non raggiunge i container.
- Identificazione:
docker inspect container_db | grep IPAddress. - Tunneling: Apri un tunnel SSH verso quell'IP interno per gestire il DB dal tuo client locale.
- Quoting: Se passi password con caratteri speciali (
!,@,#) via CLI, racchiudile tra virgolette singole'...'per evitare che la shell locale le interpreti.
SSH non interattivo — eseguire comandi remoti#
# Sintassi base — esegue comando senza aprire shell interattiva
ssh utente@host -p porta comando
# Esempi pratici
ssh bandit18@ctf.labs.overthewire.org -p 2220 cat readme
ssh bandit18@ctf.labs.overthewire.org -p 2220 ls -la
ssh utente@server.com ls /var/log/nginx/
# Shell non interattiva senza leggere .bashrc
ssh utente@host bash --norc
# Copiare output remoto in locale
ssh utente@host cat /etc/passwd > passwd_remoto.txtPerché funziona — confronto:
ssh host → bash interattiva → legge .bashrc → ha TTY
ssh host comando → bash non interattiva → NON legge .bashrc → no TTYStesso identico meccanismo di docker exec -it vs docker exec — la flag -it chiede esplicitamente una shell interattiva con TTY allocato.
Blue team: un ssh utente@host comando nei log senza apertura di sessione interattiva può indicare esecuzione remota automatizzata — normale per script di deploy, sospetto se inaspettato.
known_hosts — identificazione del server#
# Al primo accesso SSH, il sistema salva la chiave del server:
# ~/.ssh/known_hosts
# Se la chiave cambia (server reinstallato, IP riassegnato):
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# Rimuovi la chiave vecchia e riconnettiti
ssh-keygen -f "~/.ssh/known_hosts" -R "nome-host-o-ip"Se vedi questo warning su un server che non hai reinstallato, potrebbe essere un attacco man-in-the-middle — qualcuno si sta spacciando per il server. Verifica con l'amministratore prima di procedere.
Dove l'ho usato#
- progetto-lab-vm — Per gestire il server Ubuntu dal terminale del Mac.
Note personali#
Analyst Tip: Se il copia-incolla degli appunti della VM non funziona (SPICE non attivo),
ssh-copy-idè la via più veloce. Ricorda: SSH è il bersaglio numero uno per attacchi Brute Force; usa sempre l'autenticazione a chiavi e disabilita il login root via password. Rescue tip: Se SSH non risponde dopo un reboot, la causa più comune èssh.servicein statodisabled. Entra dalla console Hetzner e faisudo systemctl enable ssh— vedi recupero-accesso-ssh-hetzner.
ProxyJump — Jump Server#
# Connessione attraverso un jump server (bastion host)
ssh -J utente@jump-server utente@destinazione
# Esempio lab: Mac → Ubuntu → Kali
ssh -J barno@192.168.64.3 barno@192.168.64.200
# Catena multipla (più hop separati da virgola)
ssh -J server1,server2 destinazione
# scp attraverso jump server — stessa flag
scp -J barno@192.168.64.3 file.txt barno@192.168.64.200:~/-J = jump. Fa TCP forwarding attraverso il jump host — il Mac parla direttamente con la destinazione, il jump server è solo un tunnel di rete. La chiave privata del Mac autentica direttamente sulla destinazione, non passa per il jump server.
Configurazione permanente in ~/.ssh/config:
Host jump
HostName 192.168.64.3
User barno
Host kali-interno
HostName 192.168.64.200
User barno
ProxyJump jump→ Lab pratico: lab-jump-server-ssh
Collegato a#
- crypto — categoria (Hub)
- system — categoria (Hub)
- ssh-key-authentication — concetto (autenticazione sicura).
- ssh-tunnel — applicazione avanzata per bypassare firewall.
- docker — integrazione per la gestione dei servizi containerizzati.
- lab-jump-server-ssh — lab pratico ProxyJump con Ubuntu + Kali.
- cap-03-security-architecture — jump server come pattern di sicurezza.


