Manual
do
Maker
.
com
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.
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?
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
Ainda no servidor, é necessário configurar o servidor SSH para permitir TCP forwarding e encaminhamento, sendo que o encaminhamento é opcional.
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.
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.
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.
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.
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!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.