Skip to main content
  1. Comandi/

Ssh

·4 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

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
#

ComandoCosa faNote Blue Team
ssh barno@192.168.65.2Connessione base via IP.Porta di default: 22.
ssh -i ~/.ssh/id_ed25519 barno@hostConnessione con chiave specifica.Forza l'identità (Identity file).
ssh-keygen -t ed25519Genera chiavi moderne.ed25519 è più sicuro e veloce di RSA.
ssh-copy-id -i ~/.pub barno@hostCopia la chiave pubblica sul server.Metodo standard per abilitare il login senza password.
ssh barno@IP -p 2222 -i ~/.ssh/id_ed25519Connessione 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
who

Scenario Reale: Docker & PostgreSQL
#

Quando gestisci database dentro container, ricorda che localhost sul server remoto non raggiunge i container.

  1. Identificazione: docker inspect container_db | grep IPAddress.
  2. Tunneling: Apri un tunnel SSH verso quell'IP interno per gestire il DB dal tuo client locale.
  3. 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.txt

Perché funziona — confronto:

ssh host           →  bash interattiva  →  legge .bashrc  →  ha TTY
ssh host comando   →  bash non interattiva  →  NON legge .bashrc  →  no TTY
Tip

Stesso identico meccanismo di docker exec -it vs docker exec — la flag -it chiede esplicitamente una shell interattiva con TTY allocato.

Warning

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"
Warning

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.service in stato disabled. Entra dalla console Hetzner e fai sudo 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.

Related