Skip to main content
  1. Comandi/

Ssh Tunnel

·3 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Tecnica SSH che apre una pipe cifrata tra una porta locale (host) e una porta remota (target). Il processo ssh -N ascolta sulla porta locale e inoltra (forwarda) tutto il traffico al server remoto, agendo come un proxy sicuro senza richiedere servizi in ascolto sulla macchina locale.

Come funziona
#

Il traffico viene incapsulato all'interno della sessione SSH esistente tra il tuo Mac e il server remoto.

Il tuo Mac                         Server remoto

porta locale (es. 5433)            SSH daemon
     │                                  │
     │  ── traffico cifrato via SSH ──► │
     │                                  │
     └── aperta dal processo ssh -N     └──► destinazione:porta
					                        (es. 172.17.0.X:5432)

Anatomia del flag -L
#

ssh -L [porta_locale]:[host_destinazione]:[porta_remota] user@server

    -L  5433  :  172.17.0.2  :  5432
         │            │              │
         │            │              └─ porta sul host_destinazione
         │            └──────────────── indirizzo visto dal server remoto
         └────────────────────────────  porta che si apre sul tuo Mac

Nota: host_destinazione è risolto dal server remoto, non dal tuo Mac. Quindi localhost si riferisce al server stesso, mentre 172.17.0.X si riferisce agli IP della rete interna del server (es. container Docker).

Caso Reale: PostgreSQL dentro Docker
#

Nel progetto pippoai, il database gira in un container. localhost dal server remoto non raggiunge il container; è necessario l'IP interno.

Il tuo Mac                      Server remoto
                                
┌─────────────┐  SSH tunnel     ┌──────────────────────────┐
│             │ ──────────────► │  Host Docker             │
│  pg_dump /  │                 │                          │
│  psql       │                 │  ┌────────────────────┐  │
│  porta 5433 │ ◄────────────── │  │ container postgres │  │
│             │    dati DB      │  │ IP: 172.17.0.X     │  │
└─────────────┘                 │  │ porta: 5432        │  │
                                │  └────────────────────┘  │
                                └──────────────────────────┘

Comandi essenziali
#

ComandoCosa fa
ssh -L 5433:localhost:5432 user@host -NTunnel base verso il server stesso.
ssh -L 5433:172.17.0.X:5432 user@host -NTunnel verso l'IP specifico di un container Docker.
lsof -i :5433Verifica che il tunnel sia attivo (mostra il processo ssh).
docker inspect [nome] | grep IPAddressTrova l'IP interno del container (da eseguire sul server).

Combinazioni utili
#

# Apri il tunnel (tienilo aperto in un terminale separato)
ssh -L 5433:172.17.0.X:5432 barno@host -p 2222 -i ~/.ssh/chiave -N -v

# Esegui il dump del database attraverso il tunnel (disabilitando GSSAPI per evitare errori Kerberos)
PGPASSWORD='password' pg_dump \
  "host=localhost port=5433 dbname=rag user=rag_user gssencmode=disable" \
  --format=custom --no-owner --no-acl --file=rag_dump.dump

Troubleshooting
#

ErroreCausaSoluzione
lsof -i vuotoTunnel non aperto o caduto.Riapri con -v per vedere i messaggi di errore.
GSSAPI errorInterferenza Kerberos/GSSAPI.Aggiungi gssencmode=disable alla connection string.
Auth failedCaratteri speciali nella password.Usa virgolette singole: PGPASSWORD='...'.
Conn. refusedPorta locale già occupata.Cambia porta locale (es. 5434) o usa kill $(lsof -t -i :5433).
Conn. closedlocalhost non vede il container.Usa l'IP interno trovato con docker inspect.

Dove l'ho usato
#

  • system — Tunnel verso PostgreSQL dentro Docker per operazioni di dump/restore e debug del RAG.

Note personali
#

Analyst Tip: Il tunnel deve rimanere aperto in un terminale dedicato. Se chiudi quel processo, la connessione cade istantaneamente. Per Docker, non fidarti mai di localhost: controlla sempre l'IP del container con docker inspect.

Collegato a
#

  • system — categoria (Hub)
  • ssh — comando base.
  • docker — per la gestione degli IP interni dei container.
  • lsof — per il monitoraggio dei tunnel attivi.

Related