Bem, voltando a esta pergunta, estou executando o comando
ssh -R 8080:localhost:80 -N [email protected]
em um Mac. No entanto, o porto que está sendo encapsulado não está funcionando publicamente. Estou executando esse comando para torná-lo de forma 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 no meu computador local, a porta não parece estar aberta. Como tornaria o túnel público no IP para alguém acessar?
EDIT: Parece que o lado remoto liga apenas no host local em vez de a todas as interfaces.
EDIÇÃO 2: O cliente é o Mac OS X 10.6 e o servidor é o Linux Mint, mas ambos são OpenSSH.
ssh
ip
openssh
ssh-tunnel
Trevor Rudolph
fonte
fonte
Respostas:
Se você verificar a página de manual para ssh, verá que a sintaxe para
-R
lê:Quando
bind_address
é omitido (como no seu exemplo), a porta é vinculada apenas à interface de loopback. Para torná-lo vinculado a todas as interfaces, useou
ou
A primeira versão se liga a todas as interfaces individualmente. A segunda versão cria uma ligação geral apenas para 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
::
, 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, pois[::]
poderia ser interpretado como um globo.)Observe que, se você usar o
sshd
servidor OpenSSH , aGatewayPorts
opção do servidor precisará ser ativada (configurada comoyes
ouclientspecified
) para que isso funcione (verifique o arquivo/etc/ssh/sshd_config
no servidor). Caso contrário (o valor padrão para esta opção éno
), o servidor sempre forçará a porta a ser ligada apenas na interface de loopback.fonte
*
em bash dará arquivos e eu precisava\*
0.0.0.0
- é apenas IPv4, mas ele vai fazer a maior parte do tempo :)Editar:
-g
funciona para portas encaminhadas locais, mas o que você deseja é uma porta encaminhada reversa / remota, que é diferente.O que você quer é isso .
Essencialmente, em
example.com
, jogoGatewayPorts=clientspecified
em/etc/ssh/sshd_config
.--- resposta anterior (incorreta) ---
Use a opção -g. Na página de manual do ssh:
fonte
netstat -elnpt
partir de um tty separado para descobrir quais portas estão vinculadas a qual endereço. Sem-g
, uma porta deve estar vinculada a127.0.0.1:PORT
. Com-g
, ele deve estar vinculado a0.0.0.0:PORT
, o que o torna acessível remotamente.GatewayPorts=clientspecified
ouGatewayPorts clientspecified
Aqui está a minha resposta para conclusão:
Acabei usando
ssh -R ...
para tunelamento, esocat
além disso para redirecionar o tráfego de rede para127.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 em cima disso, mas acho isso muito mais lento
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
fonte
socat
funcionou incrível. Super útil, colocando isso no meu bolso de trás;]Você também pode usar um redirecionamento duplo, se não quiser ou mudar / etc / ssh / sshd_config.
Primeiro encaminhe para a porta temporária (por exemplo, 10080) no dispositivo de loopback na máquina remota e use o encaminhamento local para redirecionar a porta 10080 para 80 em todas as interfaces:
fonte
Use a opção "portas de gateway".
ssh -g -R REMOTE_PORT:HOST:PORT ...
Para usar isso, você provavelmente precisará adicionar "
GatewayPorts yes
" aos seus servidores/etc/ssh/sshd_config
.fonte
Os hosts de salto são uma adição relativamente recente ao OpenSSH. Isso requer acesso SSH ao intermediário, mas deve funcionar sem configuração adicional.
Este comando instrui o SSH a primeiro conectar-se
[email protected]
e, a partir dessa máquina, iniciar uma conexão com a porta 8080 nalocalhost
(ou seja, a porta que é encapsulada do host de salto para o host remoto) sob oremoteuser
nome do usuário.fonte
Se você deseja colocar a configuração em você, em
~/.ssh/config
vez de usar parâmetros de linha de comando, tente algo comoHost REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80
Lembre-se de fazer com que o firewall do host remoto permita conexões ao 8080 e verifique se a
GatewayPorts
opção da sua/etc/ssh/sshd
configuração não está definida comono
fonte