Perché dovresti usare Tmux per connessioni SSH instabili
Ti è mai capitato di eseguire un compito lungo su un server remoto, solo per perdere la connessione SSH a metà? È successo anche a me alcune volte. In questo post, condividerò come Tmux ha salvato il mio lavoro quando la connessione SSH continuava a cadere e perché dovresti usarlo per connessioni SSH instabili in Linux.
Il Problema
L'altro giorno stavo scaricando un grande backup del database da un server remoto. Era un file grande e il download avrebbe richiesto ore.
Mentre era in funzione, la nostra rete ha iniziato ad avere problemi. La mia connessione SSH continuava a disconnettersi. La rete era instabile.
Normalmente, se la connessione si interrompe, anche il download si ferma. Questo significa che dovrei ricominciare da capo.
Ma questa volta, tutto andava bene. Il download continuava.
Perché?
Perché stavo eseguendo il compito di backup all'interno di una sessione tmux!
Che cos'è Tmux?
Tmux è un multiplexer di terminale che permette di eseguire più sessioni di terminale all'interno di una singola finestra. Ti consente di gestire e passare tra compiti diversi, mantenere i processi attivi in background e persino riconnetterti alle sessioni se la tua connessione cade.
Tmux è particolarmente utile per il lavoro remoto tramite SSH, poiché mantiene i tuoi comandi in esecuzione anche quando la connessione è instabile. Puoi lasciare una sessione e tornare più tardi. Il tuo lavoro è ancora lì.
Come Tmux mi ha aiutato durante connessioni SSH instabili
Prima di iniziare il download, ho aperto una nuova sessione tmux usando il seguente comando:
tmux new -s backup_taskPoi ho avviato il download all'interno di quella sessione tmux, usando un comando come:
wget https://example.com/big-database.sql.gzPiù tardi, quando la mia connessione SSH è caduta, ho effettuato nuovamente l'accesso ed eseguito:
tmux attach -t backup_taskE così, proprio così, ero tornato al punto in cui avevo lasciato. Il download era ancora in corso. Non avevo perso alcun progresso.
Ho anche implementato una semplice soluzione temporanea per avviare automaticamente una sessione tmux su un sistema remoto quando ci si collega tramite SSH. Questo è stato utile in più occasioni quando dimenticavo di avviare inizialmente la sessione tmux.
Se sei interessato, controlla il seguente link per sapere come l'ho fatto:
- Come avviare automaticamente una sessione Tmux su un sistema remoto al login tramite SSH in Linux
Perché Consiglio Tmux
Se lavori su server remoti o usi molto SSH, tmux è uno strumento molto utile. Aiuta in molti modi:
- Mantiene il tuo lavoro in esecuzione, anche se la connessione cade,
- Ti permette di andare via e tornare più tardi,
- Ti consente di dividere lo schermo in parti,
- Rende facile scorrere, copiare e incollare.
La prossima volta che stai per eseguire qualcosa di importante in remoto, non dimenticare di eseguire tmux new -s my_session prima di premere Invio. Il tuo futuro io ti ringrazierà quando il Wi-Fi ti tradirà.
Personalmente uso tmux, ma puoi anche usare screen, un altro buon multiplexer di terminale. Sia tmux che screen sono strumenti affidabili per gestire le sessioni del terminale.
Quando Tmux non può aiutare
Tmux è una salvezza per i comandi in esecuzione sul server remoto (come installare software o scaricare file sul server).
Ma se il tuo compito dipende dalla tua connessione SSH locale, come scaricare un file dal server al tuo laptop, allora Tmux non ti salverà.
Ad esempio, se provi a scaricare un file dal server remoto al tuo computer locale (ad esempio, scp server:file.txt .), il trasferimento fallirà quando SSH si interrompe. Perché il tuo computer locale è il ricevitore.
Tmux sarà utile solo nel seguente scenario.
Ad esempio, supponiamo che tu stia accedendo al tuo server remoto tramite SSH. Apri una sessione tmux e inizi a scaricare un file da Internet al tuo server remoto (ad esempio, wget o curl sul server).
Dopo un po', la connessione SSH del tuo computer locale al server remoto cade. Cosa succede adesso?
Il download continua senza interruzioni sul server remoto perché Tmux lo mantiene in esecuzione. Quando ti riconnetti tramite SSH più tardi, puoi riattaccare la sessione Tmux e controllare l’avanzamento del download.
Il download dipende dalla connessione internet del server remoto, non dalla tua connessione SSH locale.
Tmux funziona come uno "scudo" per il terminale del server remoto. Non gli importa se la tua connessione SSH locale si disconnette.
Punto chiave:
Tmux non salverà i trasferimenti che dipendono dalla tua connessione SSH locale, ma può proteggere le operazioni lato remoto (come recuperare un file sul server). Per i download sul tuo computer locale, utilizza strumenti come rsync --partial o recupera prima il file sul server.
- Riprendi il trasferimento parziale dei file tramite SSH usando Rsync
Spero che questo ti aiuti a capire cosa tmux può e cosa non può fare. Nelle sezioni seguenti, ti spiegherò come iniziare con tmux.
Come Iniziare a Usare Tmux
Installa Tmux
Tmux è disponibile nei repository predefiniti della maggior parte delle distribuzioni Linux.
Su Debian, Ubuntu e i suoi derivati, puoi installare tmux usando il comando:
sudo apt install tmuxSu Fedora, RHEL:
sudo dnf install tmuxUso di base di Tmux
Avvia una nuova sessione:
tmux new -s mysessionQuesto avvierà una nuova sessione chiamata "mysession". Al suo interno puoi eseguire i tuoi comandi.
Quindi, scollegati dalla sessione premendo Ctrl + b, poi d. Non preoccuparti, i comandi continueranno a essere eseguiti all'interno della sessione tmux.
Puoi riattaccarti più tardi usando il comando:
tmux attach -t mysessionGrazie, sviluppatori di Tmux
Voglio ringraziare tutti coloro che lavorano su tmux e altri strumenti simili. Questi progetti non ricevono molta attenzione, ma giocano un ruolo molto importante nell'amministrazione di sistema.
Se usi spesso il terminale, ti consiglio vivamente di provare tmux o screen. Entrambi sono facili da imparare e possono aiutarti a proteggere il tuo lavoro quando qualcosa va storto.
Consigliata lettura:
- Migliorare l'accesso SSH con un menu di selezione della sessione Tmux in Linux
- Come avviare automaticamente una sessione Screen su Linux al login
- Reptyr - Sposta un processo in esecuzione da un terminale all'altro senza chiuderlo