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


14

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 corretas etc.

Então, qual é a maneira mais fácil de ajudar outras pessoas com SSH se elas estiverem atrás de um roteador NAT?

Atualmente, eu digo às pessoas para abrir um terminal, execute o comando abaixo e me passa o IP de um site como http://ip.appspot.com/ :

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

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

sshd --accept-help-from lekensteyn

Não estou procurando alternativas como o Teamviewer, apenas um shell como o SSH. Também deve ser de código aberto.

Respostas:


13

Se o seu próprio computador pode aceitar conexões SSH, existe uma maneira de usar a técnica à qual Pavlos G. vinculou sem um computador extra.

Você primeiro precisa de um usuário sem privilégios * 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 reversa:

ssh -p 62222 localhost

* Não sei o suficiente sobre segurança para poder aconselhar sobre a criação de um usuário menos privilegiado. Provavelmente é algo que deve ser abordado em uma pergunta separada.



2

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

  1. Peça que me digam a senha do roteador
  2. Encaminhamento e configuração de encaminhamento de porta apenas para a porta 22
  3. Conecte-se através do SSH (ou encapsulamento SSH se precisar de portas extras abertas) e faça o trabalho.

Também esqueci que você pode tentar o túnel ssh reverso , embora esta solução tecnicamente precise de mais um computador intermediário para funcionar.

Mais informações podem ser encontradas aqui


1) provavelmente não vai funcionar, pois o acesso ao roteador é frequentemente proibido para o público.
Lekensteyn

2

Geralmente, apenas configuro um túnel IPv6 (de sixxs.net ou he.net) se eles ainda não têm IPv6 e, dessa forma, o computador tem um endereço estático e não preciso mexer no NAT. Também gosto de configurar a autenticação baseada em chave (eles não precisam informar sua senha).

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

O Hurricane Electric usa um túnel no qual os pacotes IPv6 são enviados como a carga útil de um pacote IPv4. Ao contrário do Sixxs, nenhum TCP / UDP é usado. Isso significa que o NAT que você está atrasado deve oferecer suporte ao encaminhamento do PROTOCOL 41 (não porta) e apenas um computador atrás do NAT pode usá-lo. O software para usar um túnel como esse está embutido no Ubuntu.

Para ELE, 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 o terminal do túnel. Como você não sabe quando o IP externo muda, será necessário apenas tentar atualizar o terminal a cada poucos minutos. Você pode usar algo parecido com isto 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"

1
Que esforços precisam ser feitos para configurar corretamente esse túnel? Esta conexão é de-chave baseada claro, é por isso que eu uso ssh-import-id
Lekensteyn

Na verdade, eu adoraria aprender mais sobre esse truque.
Rafał Cieślak

0

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

http://pietrobattiston.it/reachme

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

Claramente, você não precisa de um terceiro computador se o seu 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 é perdida se o usuário remoto precisar instalar o reachme. Então, eu sempre instalo e configuro o reachme para todos que instalo o Ubuntu.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.