Tiago Madeira

Dicas

Como usar SSH quando seu roteador bloqueia que você faça conexões à porta 22

Alguns roteadores distribuídos pela NET (como alguns da marca TechniColor, mas possivelmente outros) estão bloqueando conexões para a porta 22, o que atrapalha bastante quem precisa fazer conexões via SSH.

A solução óbvia para o problema seria reconfigurar o roteador. Porém, a NET parece estar dificultando cada vez mais o acesso aos roteadores dela.

E é difícil explicar na central de relacionamento que você precisa do usuário e senha para acessar a configuração do roteador e por que você precisa disso… eu tentei, mas acho que meu interlocutor entendeu que eu queria a chave do Wi-Fi e no fim não consegui nada!

Então, sem paciência para resolver o problema da forma correta, resta fazer gambiarras. Felizmente, tais gambiarras podem também ser usadas em outros lugares que bloqueiam conexões para a porta 22 (por exemplo, algumas universidades, escolas e aeroportos, locais de trabalho etc).


A gambiarra trivial seria usar alguma VPN, mas isso não valeria um post.

Então, aqui quero falar de outras duas que encontrei buscando uma solução mais elegante para o problema.

A primeira requer que você possa mudar a porta SSH de algum servidor que tenha acesso

Se você puder mudar o SSH para uma porta alternativa (tipo 2222) em algum servidor alice.com em que você seja root, pode usá-lo como túnel (ok, essa solução é meio parecida com VPN, mas foi mais fácil & barata no meu caso).

Para mudar a porta nesse servidor é só editar /etc/sshd_config, mudar a linha Port 22 para Port 2222 e reiniciar o serviço do SSH — algo como service ssh restart (a depender da distribuição que você estiver usando).

Aí, pra usar esse servidor como túnel, você pode fazer duas coisas (do lado do cliente).

Se você só quer acessar um servidor bob.com, pode usar, como sugerido aqui:

$ ssh -N -L 3333:bob.com -p 2222 alice.com

# em outro terminal
$ ssh -p 3333 127.0.0.1

Se você quer acessar vários servidores — não só bob.com, mas também charlie.com (me parece mais útil), pode criar um proxy do tipo SOCKS num terminal e usá-lo em outros:

$ ssh -D 3333 -N -p 2222 alice.com

# em outros terminais
$ ssh -o ProxyCommand='nc -x 127.0.0.1:3333 %h %p' bob.com
$ ssh -o ProxyCommand='nc -x 127.0.0.1:3333 %h %p' charlie.com

Pra evitar lembrar da sintaxe desse ProxyCommand, que usa netcat e copiei daqui, você poderia adicioná-lo em ~/.ssh/config:

ProxyCommand nc -x 127.0.0.1:3333 %h %p

Aí, depois de criado o túnel, basta usar SSH normalmente:

$ ssh -D 3333 -N -p 2222 alice.com

# em outros terminais
$ ssh bob.com
$ ssh charlie.com

A segunda é para caso você só precise acessar GitHub e Bitbucket

Resolve o problema pra maioria dos usos de Git via SSH e o bom dela é que você pode fazer uma vez e esquecer.

Felizmente, esses serviços disponibilizam servidores/portas alternativas que você pode usar para se conectar neles.

O GitHub oferece conexão SSH na porta 443 do servidor ssh.github.com; o Bitbucket oferece conexão SSH na porta 443 do servidor altssh.bitbucket.org.

Como 443 é a porta de HTTPS (TLS), é bem difícil essa porta estar bloqueada na rede em que você estiver.

Pra evitar ter que editar os remotes de todos os seus repositórios, você pode resolver o problema pra sempre adicionando o seguinte no seu ~/.ssh/config:

Host bitbucket.org
  HostName altssh.bitbucket.org
  Port 443

Host github.com
  HostName ssh.github.com
  Port 443

Se conhecer outras soluções interessantes, fique à vontade para compartilhar na caixa de comentários!

Comentários

Macgyver

Maaaaano me salvou agora eim. Vim trampar em outra rede e nao conseguia fazer pull por nada. Usei o github com https como vc disse e foi gg

Valeu man!

Rogerio Junior

Mano, funcionou aqui! Muito obrigado, já tinha tentado de tudo.

Uso o Ubuntu 16.04.

DIGITAL OCEAN

Para quem tiver problemas para fazer conexão ssh com servidores da Digital Ocean, o truque de usar a porta 443 funcionou muito bem para resolver o problema com NET.

André

Me ajudou muito o comentário do amigo acima sobre trocar o modem. Eu tinha internet de 35 MB e o modem não tinha bloqueio SSH. Troquei a conexão para 120mb e eles vieram trocar o modem, de cara testei conexão SSH com o técnico aqui e não funcionou. Solicitei pra ele tentar trocar o modem pra ver, aí ele colocou o modem da marca ARRIS modeloTG1692A e de cara funcionou! E o modem que ele tentou instalar de primeira era TechniColor (que não funciona SSH). Então fica a dica para quem passar pelo mesmo.

Obrigado a todos e ao autor do post.

MS

Eu consegui resolver meu problema de forma definitiva trocando o modem. Com o modem TechniColor TC73337, eu não conseguia acessar nenhuma máquina remotamente usando SSH e nem clonar meus repositórios do github/gitlab/bitbucket. Liguei na NET e pedi a visita de um técnico. Com o técnico aqui em casa, pedi que ele trocasse o modem por um de outro modelo. Ele aceitou e no lugar instalou um modem Cisco DPC3928, e agora tudo está funcionando perfeitamente :)

Obs 0: Aparentemente o modem Humax HG100R da NET tbm tem problema com SSH. Obs 1: Acho melhor ligar na net e só pedir a visita de um técnico pra resolver o problema do SSH, deixando pra fazer o pedido da troca do modem diretamente pro técnico. Acho que se vc ligar na NET e pedir a troca do modem, eles vão dizer que não fazem isso, que só trocam modem com defeito, e que o que está na sua casa é excelente.

Tiago

Obrigado pelo post!

Dorian Neto

Você não tem ideia do quanto me ajudou :D

Obrigado!!

Antonio Cleverson dos Santos

DEMAISSSSSSSS!!!!!! Você é DEMAISSSS!!!! \o/ \o/ \o/ \o/ \o/ \o/ Livrou-me de mais umas 3 horas de conversas com NET e ida a pequenas causas para saber o que aconteceria. (Não que eu não vá a justiça, mas agora poderei dar entrada mais tarde)

Obrigado! Seu comentário foi enviado e será publicado quando for aprovado.

Infelizmente ocorreu um erro ao enviar seu comentário.