Como acessar o Linux Machine sentado atrás de um NAT, sem GUI?

1

Uma das minhas Caixas Debian não tem GUI. Como se conectar a ele via linha de comando de fora (como AnyDesk, Teamviewer etc ...)?

Eu posso usar SCP & SSH para acessar esta máquina enquanto eu estiver dentro da rede do escritório. Mas como eu posso acessar da minha casa? O DNS dinâmico (DDNS ou DynDNS) não é aplicável na minha configuração, pois o provedor de rede não está atribuindo um IP público à porta WAN do roteador

    
por Arun 30.07.2018 / 10:40

4 respostas

3

O SSH reverso é seu amigo. Você precisa de um servidor SSH para isso funcionar. Eu vou te dar duas abordagens para isso, o primeiro assume que você pode abrir e executar um servidor SSH da sua máquina em casa. Fornecerei uma maneira de tentar reconectar-se automaticamente a cada hora, para que seu computador em casa não precise estar sempre on-line. Como isso pode ser impossível ou difícil às vezes, eu adicionarei uma solução mais fácil e segura também, o que requer que você tenha um VPS Linux. Eles são geralmente apenas $ 2 / mês-ish.

Solução 1 - Usando apenas o seu PC em casa - Supondo IP estático:

Preparação no servidor debian:

Estou assumindo que você tenha cron instalado e em execução. Crie um novo arquivo em /etc/cron.hourly com o seguinte conteúdo: (não se esqueça de chmod +x do arquivo!)

#!/bin/bash
cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1)
cdate=$(date "+%Y-%m-%d %H:%M:%S")
if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]]
then
    echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log
else
    echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log
    ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine>
fi

Isso irá verificar por hora se a conexão estiver ativa e tentará se reconectar se não estiver. Útil quando o seu PC em casa não está sempre ligado. Ele grava informações de log em /var/log/check-ssh-relay.log . A autenticação é feita por meio de chaves SSH, portanto, certifique-se de ter configurado essa configuração com antecedência.

No seu computador em casa:

Supondo que você tenha a configuração do openssh-server corretamente, tudo que você precisa fazer agora é:

$ ssh <server-username>@localhost -p 12122

Para criar a conexão SSH. SCP, SFTP e co. funciona também, claro.

Solução 2 - Usando outro VPS como relé:

Eu uso essa solução pessoalmente. Principalmente porque eu não tenho um IP estático em casa.

Preparação no servidor debian:

Exatamente como na solução 1, exceto que em vez de <IP-of-home-machine> você usa o IP do VPS aqui.

Preparação no VPS:

Tudo o que você precisa fazer aqui é executar o seguinte comando como usuário root:

$ ssh -g -f -N -L 0.0.0.0:13122:localhost:12122 root@localhost

O -g é importante aqui para permitir conexões de entrada globais para esse encaminhamento de porta.

No seu PC em casa (ou literalmente em qualquer lugar):

Basta conectar-se ao seu VPS agora usando a porta 13122 (conforme especificado acima):

$ ssh <username>@<VPS-IP> -p 13122
    
por 30.07.2018 / 23:00
2

Se você não tiver uma GUI, tudo o que você precisa é de um console remoto - isso é normalmente alcançado com ssh , que combina segurança muito boa com serviços de valor agregado como scp (cópia remota de arquivos).

    
por 30.07.2018 / 10:47
2

Seu problema é que você está sentado atrás de um NAT que não controla e, portanto, não pode configurar o encaminhamento de porta.

A solução mais fácil para isso é o tunelamento reverso - você configura uma conexão ssh da máquina que você quer controlar, para a máquina que você quer controlá-lo (Esta máquina precisa estar acessível via ssh)

veja link

    
por 30.07.2018 / 19:12
2

Você pode configurar um servidor OpenVPN em seu escritório (supondo que você possa encaminhar a porta para fora da sua rede para a WAN pública), caixa não GUI conectada a ele (como a resposta de Baldrickk; tunelamento reverso), e então seu servidor deve poder usar o SSH na caixa não-GUI, junto com quaisquer outros serviços executados nessa caixa.

Eu vejo alguns problemas com uma abordagem como essa, uma das quais é se o cliente da sua caixa não-GUI expira uma conexão será impossível sem o SSHing localmente (na mesma rede) e reiniciando o cliente.

    
por 30.07.2018 / 19:45