Manual

do

Maker

.

com

Como fazer túnel reverso SSH

Como fazer túnel reverso SSH

Vamos começar essa série com o túnel reverso SSH, mas primeiro vou explicar uma das situações que esse túnel é utilizada.

Há algumas semanas precisei acessar um Raspberry que está na rede local de uma empresa. Porém, a pessoa responsável do lado de lá não sabia fazer port forwarding e acabou consumindo horas sem resultado. Daí decidi fazer túnel reverso ssh.

Como fazer túnel reverso na Raspberry

Tem duas formas de fazer isso. Na primeira, vamos supor que ambos os lados não tem conexão entrante em suas redes. Nesse caso, utiliza-se um servidor intermediário. O Raspberry precisa então fazer uma conexão SSH a esse servidor. Depois, a pessoa do outro lado se conecta ao servidor intermediário e automaticamente estará dentro do Raspberry. Mágico?

1 - libere a porta no servidor intermediário

Primeiramente, deve-se liberar uma porta para túnel reverso no servidor intermediário. No caso, era um droplet na digitalocean. Fiz a conexão SSH normal para configurá-lo:

ssh usuario@ip-do-servidor

Então executei o firewal:

sudo ufw status # para ver as regras existentes
sudo ufw allow 5000/tcp # porta escolhida para o túnel
sudo ufw enable # para habilitar o firewall
sudo ufw status # para confirmar a regra

Claro, para cada caso, um procedimento. Se fosse uma VM na AWS, teria que fazer essa liberação no security group da respectiva VM.

Depois de utilizar, basta remover a regra criada. No meu caso:

sudo ufw disable

2 - Configure o serviço SSH para permitir túnel reverso

Ainda no servidor, é necessário configurar o servidor SSH para permitir TCP forwarding e encaminhamento, sendo que o encaminhamento é opcional.

Faça backup do arquivo original antes de qualquer modificação

Para fazer backup do arquivo original, simplesmente execute esse comando:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config-orig

Agora edite o arquivo /etc/ssh/sshd_config e deixe esses valores assim, sem cerquilha e com yes:

AllowTcpForwarding yes
AllowAgentForwarding yes
PermitRootLogin yes
X11Forwarding yes
PermitTunnel yes

Tem recurso a mais aí, mas vamos usar em outro artigo e assim não precisarei reescrever a configuração do SSH server.

Como editar arquivos por SSH

Muitas pessoas não tem habilidade com linha de comandos, o que é normal para a maioria. Então, sugiro que use o editor nano para editar o arquivo supracitado. No caso, o comando ficaria assim:

sudo nano /etc/ssh/sshd_config

Daí você acerta as configurações descritas anteriormente e salva o arquivo. Para salvar use Ctrl+X e y para confirmar.

Reinicie o serviço

Para finalizar, reinicie o serviço SSH. A conexão estabelecida não é derrubada.

sudo systemctl restart ssh
## ou, dependendo do sistema:
sudo systemctl restart sshd
## ou ainda:
service ssh restart

Apenas um dos comandos acima. Obviamente, o que funcionar será o eleito.

3 - Conecte o Raspberry ao servidor

Agora peça a quem estiver do lado do Raspberry para que se conecte ao servidor recém configurado. Para isso ele deverá usar o seguinte comando:

ssh -R 5000:localhost:22 root@ip-do-servidor

Você precisará passar a senha para que a conexão seja estabelecida, ou criar uma chave e compartilhá-la. Para não adicionar mais conceitos, vamos no básico: Passe a senha para quem for conectar o Raspberry ao servidor.

Conexão ao Raspberry

Quando a conexão do Raspberry ao servidor estiver estabelecida, a partir do "seu" computador, faça também uma conexão ao servidor:

ssh root@ip-do-servidor

E depois de estar conectado ao servidor, faça:

ssh root@localhost -p 5000

Assim, a segunda conexão (ao localhost) fará a conexão ao Raspberry. Sucesso!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.