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

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 rígidas de firewall em vigor, ou talvez o administrador local tenha configurado um complexo Tradução do Endereço da Rede as regras. 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 “wdzwdz” 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ê acionaria um Conexão SSH do computador local e conecte-se 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 em sua extremidade for direta, o computador remoto pode se conectar a você. No entanto, isso por si só não é suficiente para as 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.

  Como personalizar lixo eletrônico e remetentes confiáveis ​​no Outlook

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 seu 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 configurar do que descrever.

Usando SSH Reverse Tunneling

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

sudo systemctl start sshd

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

sudo systemctl enable sshd

No computador remoto, usamos o seguinte comando.

  Como fixar e reformular feeds de vídeo no Microsoft Teams

A opção -R (reverso) informa ao ssh que novas sessões SSH devem ser criadas no computador remoto.
O “43022: localhost: 22” diz ao ssh que 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 é listado como não alocado. Não é um número especial.
[email protected] é a conta de usuário à qual o computador remoto 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 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.

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

Observe que quando a conexão for feita, o prompt de comando muda de [email protected] para [email protected]

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

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 as 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 ao ssh para 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

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”.

  Como ocultar fotos e vídeos privados no seu iPhone ou iPad

Observe que o prompt de comando mudou de [email protected] para [email protected] Alcançamos nosso objetivo de fazer uma conexão SSH com nosso computador remoto de difícil acesso.

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

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 com o seu computador local sem ser desafiado por uma senha.

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

Suas chaves SSH serão geradas.

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

ssh-copy-id [email protected]

Será solicitada a senha da conta de usuário na qual está fazendo login, neste caso, [email protected]

Na 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.

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.