Reverse SSH Tunnel

3

Eu tenho um servidor gitlab na minha rede local e um servidor para o qual posso ssh fora da minha rede.

Existe uma maneira de configurar o servidor para o SSH, de modo que quando eu uso:

ssh [email protected]

Ele envia isso para o servidor Gitlab na rede local? Tipo como um proxy reverso Nginx mas com ssh.

Editar:

Estou procurando e encontrei algo aqui que se parece com o que eu quero.

Access via Load Balancer

If you want to provide a more standard git experience you can manually > set up and configure an external load balancer to point to a given GitLab node. This should route traffic from port 22 to port 2222 on the > GitLab node. You can then point a DNS record at the load balancer.

Isso parece o que estou tentando fazer, mas como faço isso?

Editar 2:

Aqui está uma imagem que pode esclarecer o que estou tentando fazer.

(Essas linhas vermelhas devem estar passando pela internet também.)

    
por agustaf 12.08.2016 / 07:54

1 resposta

1

Os servidores HTTP, como o nginx, podem fazer proxy com base no nome do host, porque ele é enviado no cabeçalho do host HTTP / 1.1 da solicitação. O SSH não tem esse conceito de hosts virtuais, o cliente não envia o nome do host.

Você tem três opções:

  • Use o encaminhamento de porta para disponibilizar seu servidor gitlab diretamente.
  • Disponibilize seu servidor gitlab por meio de um endereço IPv4 ou IPv6 (adicional).
  • Crie um túnel SSH em sua rede e faça proxy da conexão SSH ao seu servidor git por meio desse túnel.

Encaminhamento de porta

Esta é provavelmente a abordagem mais fácil que interfere no "servidor público". Configure seu gateway para encaminhar a porta 2222 para 192.168.2.26:22. Em seguida, use o ssh -p2222 [email protected] para se conectar. Para git , use URLs como ssh://[email protected]:2222/repo.git .

Como alternativa, você pode usar apenas ssh://[email protected]/repo.git ou [email protected]:repo.git se criar um arquivo ~/.ssh/config com:

Host git.example.com
    Port 2222

Endereço IPv4 ou IPv6 adicional

Se você tem uma rede doméstica, provavelmente é impossível obter um endereço IPv4, mas alguns provedores de negócios fazem isso. Se a sua rede suporta IPv6 (end-to-end), então você pode apenas usar o roteamento normal sem proxy desagradável ou hackeria NAT.

túnel SSH

Você pode usar a opção ProxyCommand para especificar o comando que faz o proxy da conexão SSH para git.example.com . No seu caso, o "servidor público" é o proxy, então o comando deve estar se conectando a esse servidor.

Vamos começar com o snippet de configuração para ~/.ssh/config :

Host git.example.com
    ProxyCommand ssh -W %h:%p [email protected]

Neste snippet, a opção -W %h:%p será expandida para -W git.example.com:22 e redirecionará a entrada e a saída padrão para o host (git.example.com). Isso permite que seu cliente SSH local fale com seu servidor gitlab. Você pode usar novamente qualquer URL como [email protected]:repo.git , o proxy será transparente para o cliente git.

    
por 12.08.2016 / 19:08