Ho una connessione di rete inaffidabile tra due macchine: a volte le connessioni TCP attive vengono interrotte per motivi indipendenti dalla mia volontà. Voglio stabilire una connessione TCP affidabile tra le due macchine.
Se la rete fosse affidabile, mi limiterei a correre ssh -L 1234:localhost:1234 remotehost
, con il server in ascolto sulla porta 1234 attiva remotehost
e puntare il client verso localhost:1234
. Ma se la connessione ssh si interrompe, lo sarà anche la connessione inoltrata. Come posso organizzare il ripristino automatico della connessione tra client e server?
Non-soluzioni:
- Questo non è per applicazioni interattive, quindi lo schermo non si applica.
- Non si tratta solo di ricollegare automaticamente un tunnel SSH, la autossh . Voglio continuare a utilizzare la stessa connessione TCP con tunnel, non avviarne una nuova.
- In linea di principio, una VPN farebbe il trucco. Ma sembra eccessivo quando voglio solo una connessione TCP e vorrei una soluzione che funzioni anche se non ho i permessi di root su entrambi i lati.
Ho una vaga memoria di un programma chiamato rocks
che ha fatto proprio questo, ma sembra essere caduto dalla faccia del web. Sono per lo più interessato a Linux da entrambe le parti (anche se mi aspetto che un programma a questo livello sia portatile per altri unices), ma se conosci un programma che funziona tra QNX e VMS, tanto meglio.
scp
. Stavo rispondendo con keepalive w / ssh in base al tuo esempio di port forwarding. Ri: luppolo a valle traballante, non c'è molto che puoi fare, oltre a creare una sessione ssh con keepalive che sono più tolleranti (cioè consentire più keepalive rilasciati con ServerAliveInterval > 0
e ServerAliveCountMax > 3
). NAT richiede intervalli di mantenimento inferiori. Il problema chiave è identificare qual è il problema e adattarlo di conseguenza. Inserisci le opzioni in .ssh/config
modo che siano sempre lì per te
rocks
implementazione ... anche se questo è ovviamente un vero problema