Mantenere attivo un processo dopo aver chiuso una sessione SSH

Spesso mi capita di lanciare script, batch o qualsiasi altro processo in una sessione remota SSH abbastanza lunga ma quando il mio Macbook va in standby o perdo la connessione la procedura si interrompe perdendo tutto il lavoro svolto fino a quel momento.

Come risolvo questo problema?

Ci sono diverse soluzioni quella che uso per la maggiore è tmux.

Accedo alla macchina remota in SSH

avvio tmux con il comado tmux

lancio dentro la sessione tmuz il mio processo o script.

Per abbandonare la sessione tmux digito i tasti Ctrl+b e poi d

A questo punto posso lasciare anche la sessione ssh sulla macchina remota e il processo continuerà senza interruzioni.

Se volessi ritornare al processo basta digitare tmux attach

Accesso in SSH con l’utilizzo di chiavi

Nella gestione quotidiana di macchine virtuali e server di sicuro l’utilizzo di una coppia di chiavi privata e pubblica ci renderà l’accesso più immediato e ‘forse’ 🙂 più sicuro.

Di seguito vediamo come rendere l’accesso più immediato e pratico ma non sicuro.

Scenario: la macchina A deve connettersi alla macchina B, per comodità chiameremo la macchina A “client” e la macchina B “server”

Sulla macchina client (A) generiamo le chiavi con il comando:
ssh-keygen
confermiamo tutte le opzioni di default e lasciamo il campo passphrase vuoto, questo ci consentirà di non digitare la password ogni volta.
Al termine dello script troviamo all’interno della directory ~/.ssh i file :

  • id_rsa (chiave privata)
  • id_rsa.pub (chiave pubblica)

La chiave privata la utilizziamo nella macchina che richiede la connessione (client), mentre quella pubblica la salviamo sulla macchina a cui vogliamo connetterci il server.

Per copiare la chiave pubblica sulla macchina server possiamo procedere manualmente copiando il contenuto del file id_rsa.pub sul file ~/.ssh/authorized_keys presente sul server,
oppure con il comando
ssh-copy-id username@server
da questo momento possiamo connetterci al nostro server digitando sul client:
ssh username@server
senza inserire più la password.