Use um túnel SSH para acessar um webapp em um telefone através de um intermediário

1

tl; dr: A - > B e C - > B funciona. Como fazer com que o A- > C funcione?

Eu tenho 3 hosts

A. A local machine
B. A middle-man
C. A phone with a webapp running on port 333

Tanto A como C podem SSH em B. Assim, A- > B e C- > B funciona bem, mas A - > C não funciona.



Em B, eu posso acessar esta webapp em http://localhost:3344 depois de criar um túnel a partir de C:

machine-c$ /usr/bin/ssh -f -N -T -R 3344:localhost:333 user@machine-b



Eu teria pensado que com o túnel acima trabalhando tudo que eu preciso é um túnel de A- > B assim:

machine-a$ /usr/bin/ssh -f -N -T -L 9999:machine-b:3344 user@machine-b

Eu posso ver a seguinte mensagem:

Local connections to LOCALHOST:9999 forwarded to remote address machine-b:3344

Mas ao acessar localhost: 9999 trava com o seguinte conjunto de mensagens sendo repetido:

debug2: channel 3: zombie
debug2: channel 3: garbage collecting
debug1: channel 3: free: direct-tcpip: listening port 9999 for machine-b port 3344, connect from ::1 port 24626 to ::1 port 9999, nchannels 4
debug1: Connection to port 9999 forwarding to machine-b port 3344 requested.
debug2: fd 10 setting TCP_NODELAY
debug1: channel 3: new [direct-tcpip]
channel 3: open failed: connect failed: Operation timed out

Não tenho certeza se é relevante, mas desde A - > B funciona, eu também configurei um túnel reverso para que B - > A também funciona. Idem para B- > C. Então, no geral, os seguintes trabalhos:

A - > B

machine-a$  ssh user@machine-b

B - > A (primeiro requer um túnel SSH reverso de A- > B)

machine-a$  ssh -f -N -T user@machine-b -R1234:localhost:22
machine-b$  ssh -p 1234 user@machine-a 

O mesmo foi feito para C- > B

Como posso configurar um túnel SSH de A para C (através de B?) para que eu possa acessar esse webapp diretamente em A usando localhost: 3344?




Eu olhei para as seguintes perguntas, mas não consigo entender o que é necessário:

SSH como proxy de meias em vários hosts

Encaminhar o tráfego SSH através de uma máquina intermediária

Um túnel SSH via múltiplos saltos

    
por TheMinion 01.04.2014 / 17:01

1 resposta

1

Eu tenho uma configuração semelhante e ela está funcionando bem. A diferença que eu notei é que, no seu comando machine-a ssh, você está usando 9999:machine-b:3344 enquanto eu uso 9999:localhost:3344 . Seu caminho também não funciona para mim, mas não produz os mesmos erros. Para completar, é isso que eu recebo:

debug1: Connecting to localhost [::1] port 9999.
debug1: Connection established.
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.5p1 Debian-6
channel 2: open failed: connect failed: Connection refused
ssh_exchange_identification: Connection closed by remote host'

Os seguintes comandos fazem o truque para mim:

machine-c$  ssh -f -N -T -R 3344:localhost:333 user@machine-b

Agora na máquina-a:

machine-a$  ssh -f -N -T -L 9999:localhost:3344 user@machine-b

Como não tenho nada rodando na porta 333 da máquina-c, eu a substituí pela 22 e verifique se o túnel está funcionando simplesmente conectando através do ssh:

machine-a$  ssh -p 9999 user@localhost
    
por 01.04.2014 / 19:10