Como posso ajudar alguém (como a vovó) sobre o SSH que está por trás de um roteador NAT?

13

Para ajudar os outros rapidamente, o SSH é muito útil, especialmente combinado com o GNU Screen. É comum que os usuários estejam atrás de um roteador NAT. Mesmo que o usuário possa configurar o roteador, leva algum tempo para lembrar a senha, encontrar as opções certas, etc.

Então, qual é a maneira mais fácil de ajudar os outros através do SSH se eles estiverem atrás de um roteador NAT?

No momento, digo às pessoas para abrir um terminal executar o comando abaixo e me passar seu IP de um site como link :

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

Obviamente, isso não funcionará se eles estiverem por trás de um roteador NAT ou tiverem um firewall pessoal configurado. Então, há algo como:

sshd --accept-help-from lekensteyn

Eu não estou procurando alternativas como Teamviewer, apenas um shell como o SSH. Deve ser de código aberto também.

    
por Lekensteyn 10.06.2011 / 19:47

4 respostas

12

Se seu computador puder aceitar conexões SSH, há uma maneira de usar o técnica que Pavlos G. vinculado a sem um computador extra.

Primeiro, você precisa de um usuário desprivilegiado * com o qual seu amigo se conectará como:

sudo adduser reverse --shell /bin/false

Diga ao seu amigo para iniciar o túnel:

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

Em seguida, no seu próprio computador ( lekensteyns-server ), inicie a conexão inversa:

ssh -p 62222 localhost

* Não sei o suficiente sobre segurança para poder aconselhar sobre a criação de um usuário adequadamente desprivilegiado. Isso é provavelmente algo que deveria ser abordado em outra questão.

    
O
por ændrük 10.06.2011 / 20:45
2

Com base nas suas necessidades específicas, eu provavelmente:

  1. Peça-lhes que me digam a senha do roteador
  2. Login e configuração de encaminhamento de porta somente para a porta 22
  3. Conecte-se por meio de SSH (ou tunelamento SSH se você precisar de portas extras abertas) e faça o trabalho.

Eu também esqueci que você pode tentar o reverse ssh tunnel , embora esta solução tecnicamente precise de mais um - middle-computer para funcionar.

Mais informações podem ser encontradas aqui

    
por Pavlos G. 10.06.2011 / 20:06
2

Eu normalmente apenas configuro um túnel IPv6 (a partir do sixxs.net ou he.net) se eles já não tiverem IPv6 e então o computador tem um endereço estático e não tenho que mexer com o NAT. Eu também gosto de configurar a autenticação baseada em chave (então eles não precisam dizer a senha).

O Sixxs tem seu próprio cliente que você usa. Ele funciona por trás de praticamente qualquer NAT e é atualizado automaticamente quando o endereço IPv4 é alterado. Eles têm instruções sobre como configurá-lo e ele é empacotado para o Ubuntu.

O Hurricane Electric usa um túnel onde os pacotes IPv6 são enviados como carga útil de um pacote IPv4. Ao contrário do Sixxs, nenhum TCP / UDP é usado. Isto significa que o NAT que você está por trás tem que suportar o PROTOCOLO 41 (não porta) e somente um computador atrás do NAT pode usá-lo. O software para usar um túnel como esse está embutido no Ubuntu.

Para HE, eu uso algo assim em /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

A outra coisa que você precisa fazer é atualizar seu endpoint de túnel. Como você não sabe quando o IP externo é alterado, você terá que tentar atualizar o endpoint a cada poucos minutos. Você poderia usar algo assim e executá-lo no 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"
    
por Azendale 10.06.2011 / 23:43
0

Ao longo dos anos, desenvolvi uma GUI para fazer exatamente o que o OP pede ... exceto que requer um acesso ssh a um terceiro servidor com IP público, como sugerido por Pavlos. Você pode encontrar aqui os pacotes debian e as instruções:

link

Observe que (ainda) não é capaz de cuidar da configuração inicial - ou seja, você precisa configurar as chaves rsa para conexão sem senha. Uma vez configurado, "reachhehem" permite que você veja se "reachme" está conectado, e para abrir um shell ssh / navegar pelo sistema de arquivos / visualizar a tela (experimental).

É evidente que você não precisa de um terceiro computador se o seu próprio computador tiver um IP público, como na resposta de ændrük. E claramente, o benefício da GUI é que o usuário remoto não precisa inserir nenhum comando em um terminal ... mas parte desse benefício é perdido se o usuário remoto tiver que instalar o reachme. Então, eu sempre instalo e configuro o reachme para todos que eu instalo o Ubuntu.

    
por Pietro Battiston 21.06.2015 / 11:30