O que é o Reverse SSH Tunneling? (e Como Utilizá-lo)

  • Dave McKay

    @TheGurkha

  • Julho 18, 2019, 9:00am EDT
Eny Setiyowati/.com

Need to SSH to an unreachable Linux computer? Faça com que ele o chame e, em seguida, enterre essa conexão para obter sua própria sessão remota de SSH. Nós mostramos como.

Quando você vai querer usar o túnel SSH reverso

Às vezes, computadores remotos podem ser difíceis de alcançar. O site onde eles estão localizados pode ter regras de firewall apertadas no lugar, ou talvez o administrador local tenha configurado regras complexas de tradução de endereços de rede. Como chegar a um computador desse tipo se você precisa se conectar a ele?

Vamos estabelecer algumas etiquetas. O seu computador é o computador local porque está perto de si. O computador ao qual você vai se conectar é o computador remoto porque ele está em um local diferente de você.

Publicidade

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

Normalmente você acenderia uma conexão SSH do computador local e se conectaria ao computador remoto. Isso não é uma opção no cenário de rede que estamos a descrever. Não importa qual é o problema específico da rede – isso é útil sempre que você não pode SSH direto para um computador remoto.

Mas se a configuração de rede em sua extremidade for direta, o computador remoto pode se conectar a você. Isso por si só não é suficiente para as suas necessidades, no entanto, porque não lhe fornece uma sessão de linha de comando funcional no computador remoto. Mas é um começo. Você tem uma conexão estabelecida entre os dois computadores.

A resposta está em túnel SSH reverso.

O que é túnel SSH reverso?

Túnel SSH reverso permite-lhe usar essa conexão estabelecida para configurar uma nova conexão do seu computador local de volta para o computador remoto.

Anúncio

Porque a conexão original veio do computador remoto para você, usá-la para ir na outra direção é usá-la “em reverso”. E porque o SSH é seguro, você está colocando uma conexão segura dentro de uma conexão segura existente. Isto significa que sua conexão com o computador remoto age como um túnel privado dentro da conexão original.

E assim chegamos ao nome “reverse SSH tunneling”

Como Funciona?

Reverse SSH tunneling depende do computador remoto usando a conexão estabelecida para ouvir novos pedidos de conexão do computador local.

O computador remoto ouve em uma porta de rede no computador local. Se ele detectar um pedido SSH para essa porta, ele retransmite esse pedido de conexão de volta para si mesmo, para baixo da conexão estabelecida. Isto fornece uma nova conexão do computador local para o computador remoto.

Anúncio

É mais fácil de configurar do que de descrever.

Usando SSH Reverse Tunneling

SSH já será instalado no seu computador Linux, mas você pode precisar iniciar o daemon SSH (sshd) se o computador local nunca aceitou conexões SSH antes.

sudo systemctl start sshd

Para que o daemon SSH inicie cada vez que você reiniciar seu computador, use este comando:

sudo systemctl enable sshd

No computador remoto, usamos o seguinte comando.

  • A opção -R (reverso) diz ssh que novas sessões SSH devem ser criadas no computador remoto.
  • O “43022:localhost:22” diz ssh que os pedidos de ligação à porta 43022 no computador local devem ser encaminhados para a porta 22 no computador remoto. A porta 43022 foi escolhida porque está listada como sendo não alocada. Não é um número especial.
  • [email protected] é a conta de usuário à qual o computador remoto vai se conectar no computador local.
ssh -R 43022:localhost:22 [email protected]

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

Anúncio

Você será avisado sobre a senha da conta que você está usando para se conectar ao computador local.

Note que quando a conexão foi 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 comando who para ver os logins no computador local.

who

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

RELACIONADO: Como determinar a conta de usuário atual no Linux

Conectando ao computador remoto

Porque a conexão do computador remoto é bem sucedida, e ele está escutando conexões, podemos tentar conectar ao computador remoto a partir do local.

Anúncio

O computador remoto está escutando na porta 43022 no computador local. Assim, para fazer uma conexão com o computador remoto, pedimos ssh para fazer uma conexão com o computador local, na porta 43022. Esse pedido de conexão será encaminhado para o computador remoto.

ssh localhost -p 43022

Solucionamos a senha da conta do usuário, então conectado ao computador remoto a partir do computador local. Nosso computador Manjaro diz alegremente, “Bem-vindo ao Ubuntu 18.04.2 LTS”.

Nota que o prompt de comando mudou de dave@sulaco para dave@howtogeek. Nós atingimos nosso objetivo de fazer uma conexão SSH ao nosso computador remoto de difícil acesso.

Usando SSH com chaves

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

No computador remoto, digite este comando:

ssh-keygen

Anúncio

Você será solicitado a digitar uma senha. Você pode pressionar Enter para ignorar as perguntas da frase-senha, mas isso não é recomendado. Isso significaria que qualquer um no computador remoto poderia fazer uma conexão SSH ao seu computador local sem ser desafiado por uma senha.

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

As suas chaves SSH serão geradas.

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

ssh-copy-id [email protected]

Anúncio

Será solicitada a senha para a conta do usuário que você está acessando, neste caso, [email protected].

A primeira vez que você fizer um pedido de conexão do computador remoto para o computador local, você terá que fornecer a senha. Você não terá que digitá-la novamente para futuros pedidos de conexão, enquanto a janela do terminal permanecer aberta.

RELATADO: Como criar e instalar chaves SSH a partir do Shell Linux

Nem todos os túneis são assustadores

alguns túneis podem ser escuros e sinuosos, mas o túnel SSH invertido não é muito difícil de navegar se você conseguir manter a relação entre o computador remoto e o computador local diretamente na sua cabeça. Então reverta-o.

Dave McKay
Dave McKay usou computadores pela primeira vez quando a fita de papel perfurado estava na moda, e ele tem programado desde então. Depois de mais de 30 anos na indústria de TI, ele é agora um jornalista de tecnologia em tempo integral. Durante sua carreira, ele trabalhou como programador freelancer, gerente de uma equipe internacional de desenvolvimento de software, gerente de projetos de serviços de TI e, mais recentemente, como responsável pela proteção de dados. Dave é um evangelista Linux e defensor do código aberto. Leia a biografia completa ”

Deixe uma resposta

O seu endereço de email não será publicado.