Como tornar o túnel ssh aberto ao público?

140

Bem, referindo-se a este question, estou executando o comando

ssh -R 8080:localhost:80 -N [email protected]

em um Mac. No entanto, o porto que está sendo tunelado não está funcionando publicamente. Estou executando um comando para que a porta local possa ser aberta no computador remoto. E funciona ao abrir a porta no host local no computador remoto, mas quando tento acessar o endereço IP público do computador remoto do meu computador local, a porta não parece estar aberta. Como eu tornaria o túnel público no IP para qualquer um acessar?

EDIT: Parece que o lado remoto se liga apenas ao localhost em vez de a todas as interfaces.

EDIT 2: O cliente é o Mac OS X 10.6 e o servidor é o Linux Mint, mas ambos são OpenSSH.

    
por Trevor Rudolph 28.04.2013 / 00:14

6 respostas

290

Se você verificar a página man do ssh, verá que a sintaxe para -R é:

-R [bind_address:]port:host:hostport

Quando bind_address é omitido (como no seu exemplo), a porta é ligada apenas na interface de loopback. Para torná-lo vinculado a todas as interfaces, use

ssh -R \*:8080:localhost:80 -N [email protected]

ou

ssh -R 0.0.0.0:8080:localhost:80 -N [email protected]

ou

ssh -R "[::]:8080:localhost:80" -N [email protected]

A primeira versão se liga a todas as interfaces individualmente. A segunda versão cria uma ligação geral somente IPv4, o que significa que a porta está acessível em todas as interfaces via IPv4. A terceira versão é provavelmente tecnicamente equivalente à primeira, mas novamente cria apenas uma ligação para :: , o que significa que a porta é acessível via IPv6 nativamente e via IPv4 através de Endereços IPv6 mapeados para IPv4 (não funciona no Windows, OpenBSD). (Você precisa das aspas porque [::] poderia ser interpretado como um glob caso contrário.)

Observe que se você usar o servidor OpenSSH sshd , a opção GatewayPorts do servidor precisa ser ativada (definida como yes ou clientspecified ) para que isso funcione (verifique o arquivo /etc/ssh/sshd_config no servidor). Caso contrário (o valor padrão para essa opção é no ), o servidor sempre forçará a porta a ser ligada apenas na interface de loopback.

    
por 06.05.2013 / 08:11
34

Editar:

-g funciona para portas encaminhadas localmente, mas o que você deseja é uma porta encaminhada inversa / remota, que é diferente.

O que você quer é this .

Essencialmente, em example.com , defina GatewayPorts=clientspecified em /etc/ssh/sshd_config .

--- resposta anterior (incorreta) ---

Use a opção -g. Da página man do ssh:

-g     Allows remote hosts to connect to local forwarded ports.
    
por 28.04.2013 / 05:34
10

Aqui está minha resposta para conclusão:

Acabei usando ssh -R ... para tunelamento e usando socat além disso para redirecionar o tráfego de rede para 127.0.0.1 :

túnel ligado a 127.0.0.1: ssh -R mitm:9999:<my.ip>:8084 me@mitm

socat: mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999

Outra opção é fazer um túnel somente local além disso, mas acho isso muito mais lento

mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost

    
por 29.10.2013 / 13:09
8

Use a opção "portas de gateway".

ssh -g -R REMOTE_PORT:HOST:PORT ...

Para usá-lo, você provavelmente precisará adicionar " GatewayPorts yes " ao /etc/ssh/sshd_config do seu servidor.

    
por 28.04.2013 / 15:58
8

Você também pode usar um redirecionamento duplo se não conseguir ou puder alterar o / etc / ssh / sshd_config.

Primeiro, encaminhar para a porta temporária (por exemplo, 10080) no dispositivo de loopback na máquina remota e, em seguida, usar o redirecionamento local para redirecionar a porta 10080 para a 80 em todas as interfaces:

ssh -A -R 10080:localhost_or_machine_from:80 [email protected] "ssh -g -N -L 80:localhost:10080 localhost"
    
por 02.08.2016 / 00:37
0

Se você quiser colocar a configuração em ~/.ssh/config em vez de usar os parâmetros da linha de comando, tente algo como

Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80

Lembre-se de que o firewall do seu host remoto permite conexões com o 8080 e garante que a opção GatewayPorts do seu /etc/ssh/sshd config não esteja definida como no

    
por 26.08.2018 / 17:50