Ter ssh tunelando a si mesmo para acesso remoto de uma terceira máquina [duplicado]

2

Estou lutando para entender se e como o seguinte é possível.

Digamos que eu tenha uma máquina T (destino) que eu quero acessar do remoto (idealmente via ssh ).

T está atrás de um roteador / firewall R e não consigo encaminhar porta (por exemplo) 22 de R para a porta 22 de T . Em uma palavra, nenhum acesso ssh direto a T é possível.

Agora diga que

  • Eu tenho uma máquina A na qual eu tenho controle total.

  • Eu posso ssh de T a A , ou seja,

      T:  ssh user@A
    

    é bem-sucedido.

Q1: posso usar isso para acessar o shell de T de A ? Ou seja, posso usar a conexão criada de T para A , para usar T de A ?

   T ---> ssh ----> A          # this is possible               

   T <--- ? shell ? <---- A    # is this possible?

Q2: Se Q1 for possível:

Digamos que eu tenha uma terceira máquina L (por exemplo, meu laptop) e pretendo ter acesso ao shell de T de L . Posso ssh-tunnel A acessar para L ?

   T ----> ssh ----> A <---- ssh < ---- L

   T <-------  ?? %&£€ ?? <------- L       # is this possible?

qualquer ajuda apreciada.

    
por Acorbe 27.03.2014 / 12:48

2 respostas

1

Isso é obviamente possível.

Q1 : o tunelamento reverso sobre o ssh é possível?

Sim . Aqui estão algumas respostas sobre o túnel de reserva:

Q2 : o tunelamento de um túnel reservado é possível?

Sim , isso é basicamente um túnel ssh em um túnel. Aqui estão algumas respostas sobre o túnel em um túnel:

por 27.03.2014 / 13:06
1

Eu faço isso o tempo todo, na outra direção. Em primeiro lugar, estabeleça um túnel SSH reverso de T para localhost em A, em seguida, tunelamento de L para o lado A do túnel AT, então use ssh para conectar-se à parte local do túnel L-A e você se conectará remotamente através de L-A-T.

No meu exemplo, A está escutando as conexões ssh na porta 22123.
Localmente eu uso o usuário username, remotamente é user.name.
Eu tenho chaves localmente chamadas ~ / .ssh / A_id_rsa e ~ / .ssh / T_id_rsa para conectar as duas máquinas A e T respectivamente como user.name.

Aqui está um script para conectar o túnel T-A, que deve ser executado no T.

#!/bin/bash

SSH_KEY="-i /home/user.name/.ssh/A_id_rsa"
REMOTE_USER="user.name"
GATEWAY_MACHINE="A.domain.com"
GATEWAY_SSH_PORT="22123"

ssh -N -R2201:127.0.0.1:22 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

Aqui está um script para conectar o túnel L-A, que deve ser executado em L.

#!/bin/bash

SSH_KEY="-i /home/user/.ssh/A_id_rsa"
REMOTE_USER="user.name"
GATEWAY_MACHINE="A.domain.com"
GATEWAY_SSH_PORT="22123"

ssh -N -L2201:127.0.0.1:2201 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

Então eu adiciono o seguinte ao arquivo / etc / hosts do meu localhost, então eu posso me referir ao lado local do túnel como T: -

127.0.0.1          T

Então eu tenho este script, no nosso exemplo chamado / usr / local / bin / T para se conectar a ele

#!/bin/bash

SSH_KEY="-i /home/user/.ssh/T_id_rsa"
REMOTE_USER="user.name"

ssh -p 2201 ${SSH_KEY} ${REMOTE_USER}@T

O túnel T-A é reverso, então -R, o túnel L-A é local, então -L. O N nos scripts, impede que eles iniciem um shell em A, então eu normalmente executo isso, com um & para executá-lo em segundo plano ou pressione ctrl + Z e execute bg para fazê-lo, depois de ter inserido a senha para desbloquear A_id_rsa, se eu não tiver carregado em minhas chaves já.

    
por 27.03.2014 / 17:22