Come posso configurare una connessione SSH inversa al computer che si collega?


20

Nel prossimo futuro distribuirò un certo numero di macchine che saranno dietro i router. Non sarà possibile impostare il DNS dinamico su ciascun router e port forwarding, quindi c'è un modo in cui posso configurare queste macchine per avviare una connessione TCP al mio computer e quindi fare in modo che il mio computer inizi una connessione SSH al computer remoto tramite quella connessione?

IE:

COMPUTER A OPENS TCP CONNECTION TO COMPUTER B
COMPUTER B OPENS SSH CONNECTION OVER THE EXISTING TCP CONNECTION TO COMPUTER A
COMPUTER B NOW HAS SSH CONNECTION TO COMPUTER A

È possibile, e in tal caso, come posso farlo?


Risposte:


21

In /etc/ssh/sshdper Computer B impostato:

AllowTcpForwarding yes
TCPKeepAlive yes

Dal computer A :

$ ssh -R 2222:localhost:22 ip.of.computer.b

Dal computer B :

$ ssh localhost -p 2222

Si noti che 2222 è un numero arbitrario ad alta porta che ho scelto. Quella porta sul Computer B verrà quindi rimessa in tunnel attraverso la connessione SSH inizializzata sul Computer A sulla porta 22. Se si dispone di più macchine, è necessario utilizzare una porta diversa per ogni macchina.

Per il tuo caso d'uso vorrai probabilmente eseguirlo da uno script in modo da poterlo rendere un demone e provare periodicamente a riconnetterti se il collegamento viene eliminato. Probabilmente vorrai un account speciale con una shell di solo /bin/truesul computer B per gestire le connessioni in entrata. È quindi possibile impostare un singolo tasto o più tasti per ciascun computer a cui è consentito "chiamare home".

Su computer A si potrebbe trovare il -n, -Ne -Topzioni utili per scollegarlo dalla ingresso locale (in modo che possa essere eseguito in background), non cercare di eseguire qualsiasi comando a distanza, basta aprire il tunnel, e non creare un TTY.

I metodi più normali per generare un demone non funzionano molto bene con la creazione di un tunnel di rete come questo. Un problema di connettività di rete proverebbe a tentare di abbattere il muro per attraversarlo. Un semplice ciclo con un sonno da attendere dovrebbe fare il trucco. Dieci minuti sono un bel numero perché non inondano la rete e registrano i file con tentativi se c'è un problema (come il Computer B non è in linea) ma ti riporta comunque abbastanza velocemente se la connessione viene interrotta.

#/bin/sh
while true; do
    sleep $((60*10))
    ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done

Uno script del genere può essere eseguito avviato all'avvio /etc/rc.local. Il tuo primo cambiamento di accedere nella macchina inizierà circa dieci minuti dopo che i computer A stivali.


1
Bello. Quindi praticamente farei in modo che ogni macchina remota esegua il tunneling della porta SSH locale verso una porta sulla macchina locale? Potrebbe essere saggio avere ogni macchina solo tunnel la connessione su richiesta. Potrei essere in grado di avere ogni macchina aperta una connessione HTTP keep-alive e spingere i dati XML quando vorrei che tentasse una connessione inversa, in modo da rendere la gestione più semplice (e non ostruire tutte le mie porte;]). Grazie!
Naftuli Kay,

@TKKocheran: Ci sono alcune porte tra cui scegliere ... in particolare più di quanto tu abbia i chioschi. In che modo mantenere un tunnel SSH aperto è peggio che mantenere aperta una connessione http?
Caleb,

Immagino che tu abbia ragione, potrei semplicemente farlo, ma poi dovrei mappare le porte alle macchine e ricordare quale sia quale, mentre l'altro percorso verrebbe pigramente istanziato, cioè creare un tunnel SSH solo quando richiesto.
Naftuli Kay,

1
@TKKocheran: Dovresti fare la mappatura in entrambi i modi, altrimenti anche la tua istanza pigra si imbatterebbe in situazioni in cui hanno cercato di bloccarsi a vicenda.
Caleb,

1
Non so se sia generalmente applicabile, ma il mio sshd config è ora /etc/ssh/sshd_config
attivo
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.