O que é encapsulamento SSH reverso? (e como usá-lo)

Prompt SSH em um laptop
Eny Setiyowati / Shutterstock.com

Precisa de SSH para um computador Linux inacessível? Faça com que ele ligue para você e então abra essa conexão para obter sua própria sessão SSH remota. Nós mostramos como.

Quando você quiser usar o túnel SSH reverso

Às vezes, os computadores remotos podem ser difíceis de alcançar. O site em que eles estão localizados pode ter regras de firewall rígidas, ou talvez o administrador local tenha configurado regras complexas de tradução de endereços de rede . Como você acessa esse computador se precisar se conectar a ele?

Vamos estabelecer alguns rótulos. Seu computador é o computador local porque está perto de você. O computador ao qual você vai se conectar é o computador remoto porque está em um local diferente do seu.

Para diferenciar entre os computadores locais e remotos usados ​​neste artigo, o computador remoto é chamado de “howtogeek” e está executando o Ubuntu Linux (com janelas de terminal roxas). O computador local é chamado de “Sulaco” e está executando o Manjaro Linux (com janelas de terminal amarelas).

Normalmente, você iniciaria uma conexão SSH do computador local e se conectaria ao computador remoto. Essa não é uma opção no cenário de rede que estamos descrevendo. Na verdade, não importa qual é o problema de rede específico – isso é útil sempre que você não pode usar o SSH direto para um computador remoto.

Mas se a configuração de rede do seu lado for direta, o computador remoto pode se conectar a você. No entanto, isso por si só não é suficiente para suas necessidades, porque não fornece uma sessão de linha de comando funcional no computador remoto. Mas é um começo. Você estabeleceu uma conexão entre os dois computadores.

Recomendado:  Como usar Markdown no Google Docs

A resposta está no tunelamento SSH reverso.

O que é encapsulamento SSH reverso?

O tunelamento SSH reverso permite que você use essa conexão estabelecida para configurar uma nova conexão do computador local de volta ao computador remoto.

Como a conexão original veio do computador remoto para você, usá-la para ir na outra direção é usá-la “ao contrário”. E como o SSH é seguro, você está colocando uma conexão segura dentro de uma conexão segura existente. Isso significa que sua conexão com o computador remoto atua como um túnel privado dentro da conexão original.

E assim chegamos ao nome “tunelamento SSH reverso”.

Como funciona?

O encapsulamento SSH reverso depende do computador remoto usando a conexão estabelecida para ouvir novas solicitações de conexão do computador local.

O computador remoto escuta em uma porta de rede no computador local. Se ele detectar uma solicitação SSH para essa porta, retransmitirá essa solicitação de conexão de volta para si mesmo, descendo a conexão estabelecida. Isso fornece uma nova conexão do computador local para o computador remoto.

É mais fácil de configurar do que descrever.

Usando SSH Reverse Tunneling

O SSH já estará instalado em seu computador Linux, mas você pode precisar iniciar o daemon SSH (sshd) se o computador local nunca tiver aceitado conexões SSH antes.

sudo systemctl start sshd

sudo systemctl iniciar sshd em uma janela de terminal

Para que o daemon SSH seja iniciado sempre que você reinicializar o computador, use este comando:

sudo systemctl enable sshd

sudo systemctl enable sshd em uma janela de terminal

No computador remoto, usamos o seguinte comando.

  • A -Ropção (reversa) informa sshque novas sessões SSH devem ser criadas no computador remoto.
  • O “43022: localhost: 22” informa  sshque as solicitações de conexão para a porta 43022 no computador local devem ser encaminhadas para a porta 22 no computador remoto. A porta 43022 foi escolhida porque está listada como não alocada . Não é um número especial.
  • dave@sulaco.local é a conta de usuário à qual o computador remoto se conectará no computador local.
ssh -R 43022: localhost: 22 dave@sulaco.local

ssh -R 43022: localhost: 22 dave@sulaco.local em uma janela de terminal

Você pode receber um aviso sobre nunca ter se conectado ao computador local antes. Ou você pode ver um aviso conforme os detalhes da conexão são adicionados à lista de hosts SSH reconhecidos. O que você vê – se houver alguma coisa – depende se as conexões já foram feitas do computador remoto para o computador local.

Recomendado:  Como criar um fundo de zoom personalizado

Será solicitada a senha da conta que está usando para se conectar ao computador local.

Detalhes da conexão SSH em uma janela de terminal

Observe que, quando a conexão é feita, o prompt de comando muda de dave @ howtogeek para dave @ sulaco.

Agora estamos conectados ao computador local a partir do computador remoto. Isso significa que podemos emitir comandos para ele. Vamos usar o whocomando para ver os logins no computador local.

Who

o comando who em uma janela de terminal

Podemos ver que a pessoa com a conta de usuário chamada dave se conectou ao computador local, e o computador remoto se conectou (usando as mesmas credenciais de usuário) do endereço IP 192.168.4.25.

Conectando ao Computador Remoto

Como a conexão do computador remoto foi bem-sucedida e ele está ouvindo conexões, podemos tentar conectar ao computador remoto a partir do local.

O computador remoto está escutando na porta 43022 no computador local. Portanto, um tanto contra-intuitivamente, para fazer uma conexão com o computador remoto, pedimos sshpara fazer uma conexão com o computador local, na porta 43022. Essa solicitação de conexão será encaminhada para o computador remoto.

ssh localhost -p 43022

ssh localhost -p 43022 em uma janela de terminal

Somos solicitados a fornecer a senha da conta do usuário e, em seguida, conectados ao computador remoto a partir do computador local. Nosso computador Manjaro felizmente diz, “Bem-vindo ao Ubuntu 18.04.2 LTS”.

conexão de túnel ssh reversa para computador remoto

Observe que o prompt de comando mudou de dave @ sulaco para dave @ howtogeek. Alcançamos nosso objetivo de fazer uma conexão SSH com nosso computador remoto difícil de alcançar.

Usando SSH com chaves

Para tornar mais conveniente a conexão do computador remoto ao computador local, podemos configurar as chaves SSH.

No computador remoto, digite este comando:

ssh-keygen

ssh-keygen em uma janela de terminal

Será solicitada uma senha longa. Você pode pressionar Enter para ignorar as perguntas da frase secreta, mas isso não é recomendado. Significaria que qualquer pessoa no computador remoto poderia fazer uma conexão SSH ao seu computador local sem ser desafiado por uma senha.

Recomendado:  Agora você pode comprar a barra de som Wild Head-Tracking da Razer

Três ou quatro palavras separadas por símbolos formarão uma frase-senha robusta.

geração de chave ssh em uma janela de terminal

Suas chaves SSH serão geradas.

Precisamos transferir a chave pública para o computador local. Use este comando:

ssh-copy-id dave@sulaco.local

ssh-copy-id dave@sulaco.local em uma janela de terminal

Será solicitada a senha da conta de usuário na qual você está acessando, neste caso, dave@sulaco.local.

transferência de chaves SSH para o computador local em uma janela de terminal

A primeira vez que você fizer uma solicitação de conexão do computador remoto para o computador local, terá que fornecer a senha longa. Você não terá que digitá-lo novamente para solicitações de conexão futuras, enquanto a janela do terminal permanecer aberta.

caixa de diálogo de solicitação de senha

Nem todos os túneis são assustadores

Alguns túneis podem ser escuros e tortuosos, mas o tunelamento SSH reverso não é muito difícil de navegar se você puder manter a relação entre o computador remoto e o computador local direto em sua cabeça. Em seguida, inverta.