Come posso configurare in modo tale da poter sempre SSH sul mio sistema su Internet su un IP dinamico?


11

Fondamentalmente voglio essere in grado di fare qualcosa come teamviewer, indipendentemente dalla configurazione di rete, purché sia ​​il mio server ssh (Macchina A) che il client ssh (Macchina B) abbiano accesso a Internet (e qualche terzo server, Macchina C ), Posso ottenere l'accesso - il motivo di ciò è che voglio essere in grado di spostare la macchina A, collegarla all'alimentazione, farla connettere automaticamente a una delle diverse reti wifi preconfigurate (ognuna unica / diversa) , senza aver configurato il port forwarding o simili sulle reti ed essere in grado di accedere tramite Internet dalla macchina B

Come posso farlo? Non mi dispiace impostare qualcosa su un server con un indirizzo IP statico per dare una mano con l'handshake, ma non mi dispiace nemmeno un server di terze parti se qualcosa esiste già (come per dire teamviewer)

modifica per chiarezza: ho 3 macchine, AB e C

A è un raspberry pi senza testa che verrà acceso / spento in posizioni casuali, connettersi a una rete wifi preconfigurata

B è la macchina con un monitor, una tastiera, ecc. Adeguati da cui voglio collegarmi

C è un server AWS noleggiato che ho con un indirizzo IP statico, può affidabile SSH da B e può installare tutto ciò che è necessario per aiutare B a connettersi ad A


Puoi ssh alla terza macchina?
Anthon,

@Anthon Penso di sì, li ho rinominati AB e C e ho aggiunto descrizioni per loro, si spera che li chiarisca
user2813274

tosse no-ip.com tosse
Joshua,

1
no-ip.com non ti aiuterà se il firewall perimetrale nella tua posizione non consente il traffico di ritorno!
Bobstro,

Ho usato per usare sshi tunnel, molto brevemente. Non potrei mai farli stare alzati, però, anche con autossh; se l'uplink è caduto per qualsiasi motivo, dovrebbe sempre essere riavviato a mano. Alla fine ho creato una piccola VPN per me stesso con OpenVPN, e ha fatto bene il lavoro.
Blacklight Shining

Risposte:


11

Dato che hai la macchina C su Internet, crea un account speciale lì chiamato sesame, e su A crei un account con una chiave pubblica / privata da cui hai copiato la chiave pubblica sesamesull'account su C.

Ora puoi accedere da A a C, ma invece di farlo:

ssh -N -R 19930:localhost:22 sesame@yourserverC

(potresti voler combinare questo con un'istruzione sleep o, ad esempio, 10 secondi e avvolgerlo in un ciclo infinito in modo che la connessione venga ristabilita se il WiFi inattivo ha causato l'interruzione)

Dalla macchina B, normalmente accedi a qualsiasi account che hai su C (può essere ma non deve essere l' sesameaccount, diversi account è quello che uso). E una volta che sei su C, accedi ad A usando:

ssh localhost -p 19930

Ovviamente puoi usare un numero diverso da 19930.

È possibile eseguire il ssh -N -R ...da /etc/rc.localse la chiave privata su A non è protetta da password. In tal caso, assicurati di creare sesameun account separato con funzionalità limitate, in modo che quando la tua macchina A viene compromessa / rubata, il rischio per il tuo server C sia limitato. Questo è anche il motivo per cui ti consiglio di utilizzare un account separato per passare da B a C.

In realtà si può impostare la shell di login per sesamein /etc/passwda /bin/false, quindi non è più possibile utilizzare l'account per il login.


Questa soluzione è diversa dall'uso di TeamViewer, in cui il server viene utilizzato per aprire le porte che vengono quindi reindirizzate per comunicare direttamente. Proprio come programmi come BitTorrent comunicano direttamente dopo aver trovato macchine da cui scaricare (senza dover aprire le porte in anticipo).
Anthon,

Quindi la differenza principale è che in questo modo TUTTO il traffico passa attraverso il server C, rispetto a C utilizzato solo per stabilire un collegamento, e quindi non utilizzato per il resto della connessione. Hai un buon punto per quanto riguarda la sicurezza, c'è qualcosa che dovrei fare in particolare per rendere il sesamo incapace di fare qualcosa su C oltre al minimo indispensabile per accedere? (Sistema RHEL)
user2813274

1
@ user2813274 In effetti, in questo scenario tutti i trafic passano attraverso C (il che toglierebbe l'utilità da BitTorrent). Non sono sicuro fino a che punto puoi limitare l' sesameaccount su C, potrebbe essere che puoi farlo funzionare /bin/falsecome shell di accesso (poiché ssh non accede mai davvero), o altrimenti limitarlo aggiungendo un command=parametro in~/.ssh/authorized_keys
Anthon,

@ user2813274 Nel caso in cui non ci si sia provato: se si dispone di un account speciale per l'impostazione del proxy inverso, è possibile disabilitare gli accessi a tale account modificando la shell di accesso in /bin/false.
Anthon,

1
@ user2813274 Sì, l'ho provato e mi avrebbe permesso di impostare il tunnel inverso (hai bisogno di un account diverso per accedere al server C per fare ssh localhost -p portnumovviamente)
Anthon,

7

Installa un tunnel IPv6 (come Sixxs ) sul tuo Raspberry Pi. Ora avrai un indirizzo IPv6 statico permanente che verrà online ogni volta che il tuo Pi è online. Assicurati di proteggere il tuo Pi poiché è connesso al mondo ora.

Se la tua B è connessa a una rete IPv6, connettiti direttamente al Pi. Se B non è connesso a una rete IPv6, usa C come server jump, dove ti connetti tramite IPv4 a C e quindi ssh su IPv6 da C al tuo Pi.


Mi piace questo perché non richiede nemmeno C se le reti supportano IPV6, dovrò provarlo comunque - qualsiasi problema con i firewall che lo bloccano per impostazione predefinita?
user2813274

1
Sixxs fornisce più di un protocollo per il tunneling IPv6. Se usi Anything In Anything (AYIYA) avrai bisogno della porta TCP 3874 e della porta UDP 5072 aperte dal Pi a Internet. Sulle reti domestiche, questo dovrebbe andare bene; le reti aziendali o dei campus potrebbero essere diverse.
garethTheRed,

L'installazione del tunnel sembrava fattibile, ma sembra che dovrei registrarmi al servizio Sixxs, aspettare che tornino da me con un indirizzo IP, ecc. - non molto più semplice - ancora potenzialmente una buona soluzione, ma io non pensare che sia la strada che sto per seguire per ora.
user2813274,

1

Dai anche un'occhiata a questo:

La tecnologia utilizzata è la stessa di quella descritta nella risposta accettata, ma utilizza alcuni script per automatizzare le cose e rendere la soluzione più generica. Rende inoltre l'intera configurazione all'interno di un contenitore Docker, in modo che il sistema principale sia sicuro nel caso in cui qualcosa sia compromesso.

Tuttavia, non fornisce la connessione automatica da A a C, deve essere avviato manualmente. Forse puoi personalizzare un po 'la soluzione in modo che faccia esattamente quello che vuoi.


0

Forse devi usare altro che ssh o il concetto di tunneling ... Ti suggerisco di usare un concetto di messaggistica come whatsapp o telegram .. Ma penso che, se vuoi usare qualcosa come VIM, non è buono come ssh ..

Telegram ha un client di telegram-cli che puoi modificare per accettare ed eseguire determinati comandi e implementarli nel raspi ..

Se usi Telegram puoi semplificare la tua rete e almeno ridurre la macchina C per fare l'hub perché il server C è sottotitolato con il server di messaggistica di telegramma .. telegram già fornisce iPhone e client Android, quindi non penso che tu abbia bisogno della tua B Anche macchina, puoi installare il client telegram per un sistema operativo specifico se vuoi ... sicurezza? il messaggio del telegramma è codificato .. Se qualcuno vuole fare il tuo raspi? prima diranno il server di telegrammi.

Quindi finché raspi può connettersi al server telegram (semplicemente raspi si connette a Internet) anche raspi è dietro firewall / proxy / IP privato / IP dinamico, puoi sempre fare il telecomando.

Con questo concetto, puoi fare il telecomando ovunque, in qualsiasi momento ..


Wat. Non è sicuro, ti stai fidando di qualche app di messaggistica casuale, stai dicendo che OP dovrebbe andare a modificare detta app di messaggistica casuale per farlo funzionare. Questo non sta nemmeno realizzando che l'app di messaggistica casuale si romperebbe completamente con qualcosa di simile a Vim e abbia una latenza orribile.
Ancora un altro utente il

Bene, se lo usi solo per inviare un comando, penso che sia ok .. se lo usi per qualcosa come VIM, non credo sia buono .. Un buon consiglio ..
Modificherò la

Non penso che sia quello che voglio, voglio un accesso completo alla shell, niente di meno - per quanto riguarda il dosaggio del Pi .. Non mi preoccupo molto, prima di tutto perché devo fare una configurazione speciale per anche connettermi a me stesso, secondo perché le sue connessioni saranno intermittenti e cambieranno casualmente comunque
user2813274

0

Penso che dovresti dare un'occhiata al port forwarding ssh inverso. In poche parole, devi prima iniziare un ssh da A a C usando la sintassi seguente e poi usare quella porta per tornare indietro da C ad A. Non lo farai nel firewall domestico di A quando lo fai perché l'R-Pi ha già un tunnel.

ssh -R 2210: localhost: 22 myCoolAwsSite.com

Si prega di considerare le implicazioni di sicurezza quando lo si fa. Puoi aggiungere cron jujitsu in modo che la connessione venga ristabilita dopo un riavvio.


Err ... in che modo differisce dalla risposta di Anthon?
user2813274
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.