Come posso aiutare qualcuno (come la nonna) su SSH dietro un router NAT?


14

Per aiutare rapidamente gli altri, SSH è molto utile, specialmente combinato con GNU Screen. È comune che gli utenti siano dietro un router NAT. Anche se l'utente può configurare il router, ci vuole del tempo per ricordare la password, trovare le giuste opzioni, ecc.

Quindi, qual è il modo più semplice per aiutare gli altri su SSH se si trovano dietro un router NAT?

Al momento dico alle persone di aprire un terminale eseguendo il comando seguente e passandomi il loro IP da un sito come http://ip.appspot.com/ :

sudo apt-get install openssh-server ssh-import-id && ssh-import-id lekensteyn

Ovviamente, questo non funzionerà se si trovano dietro un router NAT o se è configurato un firewall personale. Quindi, c'è qualcosa come:

sshd --accept-help-from lekensteyn

Non sto cercando alternative come Teamviewer, solo una shell come SSH. Dovrebbe essere anche open-source.

Risposte:


13

Se il tuo computer può accettare connessioni SSH, c'è un modo per usare la tecnica a cui Pavlos G. ha collegato senza un computer aggiuntivo.

Per prima cosa è necessario un utente senza privilegi * che il tuo amico si connetterà come:

sudo adduser reverse --shell /bin/false

Di 'al tuo amico di iniziare il tunnel:

ssh -N -R 62222:localhost:22 reverse@lekensteyns-server

Quindi, sul tuo computer ( lekensteyns-server), avvia la connessione inversa:

ssh -p 62222 localhost

* Non so abbastanza sulla sicurezza per poterti consigliare sulla creazione di un utente adeguatamente svantaggiato. Questo è probabilmente qualcosa che dovrebbe essere coperto in una domanda separata.



2

In base alle tue esigenze specifiche, probabilmente:

  1. Chiedi loro di dirmi la password del router
  2. Login e configurazione del port forwarding solo per la porta 22
  3. Connettiti tramite SSH (o tunneling SSH se hai bisogno di porte extra aperte) e fai il lavoro.

Ho anche dimenticato che puoi provare il tunnel ssh inverso , anche se questa soluzione ha tecnicamente bisogno di un altro computer medio per funzionare.

Maggiori informazioni possono essere trovate qui


1) probabilmente non funzionerà poiché l'accesso al router è spesso proibito al pubblico.
Lekensteyn,

2

Di solito ho appena impostato un tunnel IPv6 (da sixxs.net o he.net) se non hanno già IPv6 e in quel modo il computer ha un indirizzo statico e non devo fare casino con NAT. Mi piace anche impostare l'autenticazione basata su chiave (quindi non devono dirti la loro password).

Sixxs ha il proprio client che usi. Funziona dietro quasi tutti i NAT e si aggiorna automaticamente quando cambia l'indirizzo IPv4. Hanno istruzioni su come configurarlo ed è confezionato per Ubuntu.

Hurricane Electric utilizza un tunnel in cui i pacchetti IPv6 vengono inviati come payload di un pacchetto IPv4. A differenza di Sixxs, non viene utilizzato TCP / UDP. Ciò significa che il NAT che si trova dietro deve supportare l'inoltro PROTOCOL 41 (non la porta) e solo un computer dietro il NAT può utilizzarlo. Il software per utilizzare un tunnel come questo è integrato in Ubuntu.

Per HE, uso qualcosa del genere in /etc/network/interfaces:

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     endpoint 216.218.226.238
     address  2001:470:a29f::2
     netmask  64
     ttl 64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

L'altra cosa che devi fare è aggiornare l'endpoint del tunnel. Poiché non si sa quando cambia l'IP esterno, è necessario provare ad aggiornare l'endpoint ogni pochi minuti. Puoi usare qualcosa del genere ed eseguirlo da cron:

#!/bin/sh
echo -n "Hurricane Electric Proto-41 tunnel endpoint update: "
#(C) 2010 Erik B. Andersen This script is licensed under the latest version of the
# AGPL published by the Free Software Foundation at http://www.gnu.org/licenses/ .
####Set these for each different site#########
pass="passwordhere"
user_id="a765b8e2f474667dcb56e08c5f1aa05b"
tunnel_id="97817"
####Past here doesn't need to be changed######
wget -4 "https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$(echo -n "${pass}" | md5sum | grep -o -E "[0-9a-fA-F]{32}")&user_id=${user_id}&tunnel_id=${tunnel_id}" -O /dev/null -o /dev/null --no-check-certificate
echo " Done"

1
Quali sforzi devono essere fatti per impostare correttamente un tunnel del genere? Questa connessione è ovviamente basata sulle chiavi, ecco perché uso ssh-import-id
Lekensteyn,

In effetti, mi piacerebbe saperne di più su questo trucco.
Rafał Cieślak,

0

Nel corso degli anni, ho sviluppato una GUI per fare esattamente ciò che l'OP chiede ... tranne per il fatto che richiede un accesso ssh a un terzo server con IP pubblico, come suggerito da Pavlos. Puoi trovare qui i pacchetti debian e le istruzioni:

http://pietrobattiston.it/reachme

Si noti che (ancora) non è in grado di occuparsi della configurazione iniziale - vale a dire, è necessario impostare autonomamente le chiavi rsa per una connessione senza password. Una volta impostato, "reachthem" consente di vedere se "reachme" è collegato e di aprire una shell ssh / sfogliare il filesystem / visualizzare lo schermo (sperimentale).

Chiaramente, non è necessario un terzo computer se il computer stesso ha un IP pubblico, come nella risposta di ændrük. E chiaramente, il vantaggio della GUI è che l'utente remoto non deve immettere alcun comando in un terminale ... ma una parte di questo vantaggio viene persa se l'utente remoto deve installare reachme. Quindi ho sempre installato e impostato reachme per tutti quelli su cui installo Ubuntu.

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.