Riconnessione automatica delle connessioni SSH con una sessione 'schermo' specifica


10

In genere ho diverse finestre dei terminali, ognuna delle quali è collegata tramite SSH a un server remoto. In ogni finestra lavoro usando il programma gnu screen, per garantire la persistenza dei processi interattivi in ​​caso di disconnessione.

Attualmente, ogni volta che la connessione ssh si interrompe (come quando metto il mio computer client in sospensione durante la notte) devo riavviare manualmente e noiosamente la sessione ssh all'interno di ciascuna finestra, e poi in ogni finestra riprendere noiosamente la sessione schermata specifica (ad esempio "schermo - r 3453 "in una finestra", schermo -r 3462 "nell'altra ecc.)

Esiste un modo elegante per automatizzare questo? In particolare:

  • ricollegare la sessione ssh se si interrompe, non appena viene rilevata una connessione a Internet

  • eseguire l'istanza dello schermo specifica per la finestra del terminale non appena ssh si riconnette

Grazie per eventuali suggerimenti su questo

Risposte:


10

Puoi eseguire questo: ssh -t hostname screen -r 3453per riconnetterti. Se vuoi farlo in un ciclo, utilizzo uno dei seguenti script.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

Funziona meglio se hai impostato ssh-keys in modo da poter accedere senza digitare la password. Consiglierei anche di guardare a tmux, un'implementazione più moderna dello schermo. In realtà uso lo script sopra con lo schermo. Probabilmente vorrai anche usare una sessione schermo denominata piuttosto che usare il pid come fai nel tuo esempio.


Grazie! A cosa serve esattamente "-o BatchMode = yes"?
GJ.

Ti permetterà di non richiedere la password. Da 'man ssh_config': "l'interrogazione passphrase / password sarà disabilitata. Questa opzione è utile negli script e in altri lavori batch in cui non è presente nessun utente per fornire la password." Quindi usalo solo se hai già impostato ssh-keys.
Jason Axelson,

5

Non è necessario hackerare loop bash. Devi guardare in autossh . Non ho usato molto più di me, ma la mia comprensione è che semplicemente sostituire sshcon autosshnel comando.

Modifica: In effetti, autossh viene fornito con uno script chiamato rscreenche sembra essere progettato proprio per questo scopo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.