ssh em um servidor sem IP público de um servidor sem IP público que está escondido atrás de um servidor com IP público

ssh em um servidor sem IP público de um servidor sem IP público que está escondido atrás de um servidor com IP público

Tenho a seguinte configuração: gostaria de acessar a máquina A da máquina C, mas nenhuma delas possui um endereço IP público. A máquina C está, no entanto, na mesma rede que a máquina B, que tem acesso IP público, portanto, posso acessar a máquina C de qualquer lugar, primeiro fazendo ssh na máquina B e de lá ssh na máquina C. Não tenho acesso root na máquina B, enquanto em A e CI o fazem. Veja o diagrama a seguir para esclarecimentos:

machine A          machine B      machine C
no public IP       public IP      no public IP
root access        no root access root access     
how to access?    '---------------------------'
                           same network
                       hence both accessible

Uma solução idiota seria fazer com que a máquina A detectasse regularmente um arquivo na máquina C (pelo acesso ssh em duas etapas descrito acima) e sempre que um comando aparecer nesse arquivo, execute-o e escreva as saídas sobre ssh em algum lugar da máquina C. I , porém, pergunto-me, o ssh pode de alguma forma "reverter" a conexão, de modo que a máquina A se conecte em 2 etapas à máquina C e, em seguida, a conexão seja "invertida" para que a máquina C realmente tenha o shell remoto da máquina A? E se sim, como faço isso?

Responder1

Você pode ter que machineAabrir um túnel SSH para machineB, com uma opção de encaminhamento remoto, que permitiria fazer SSH para machineAfrom machineB.

Se você tiver acesso root ativado machineB, defina a GatewayPortsopção de configuração como yesin /etc/ssh/sshd_confige emita este comando em machineA:

ssh -N -R 0.0.0.0:2222:127.0.0.1:22 the_public_ip_of_machine_B

Isso abrirá a porta 2222 machineBe encaminhará qualquer tráfego nessa porta para si mesma, para a porta 22. Observe que isso escutará em todas as interfaces, incluindo a pública, então você pode querer usar o firewall da porta número 2222 (mas provavelmente você tem um firewall ativado machineBde qualquer maneira). Enquanto este túnel estiver ativo, você pode usar SSH machineBna porta 2222, e isso o levará para machineA. Como machineBe machineCestão na mesma sub-rede, você pode fazer login machineAem machineCuma única etapa.

Se você não tiver acesso root machineB, o processo será o mesmo, com exceção do endereço de escuta. Se GatewayPortsestiver definido como no(que é o padrão), o primeiro argumento ( 0.0.0.0) será simplesmente ignorado e o endereço de escuta será vinculado a 127.0.0.1. Nesse caso, você ainda pode usar o comando acima, e o encaminhamento funcionará da mesma forma, mas a porta aberta não estará disponível em qualquer lugar, exceto em machineB. Portanto, você deve usar SSH para machineB, depois SSH para localhost, porta 2222, que o levará para machineA.

No entanto, você pode considerar o uso de algo mais robusto, como uma VPN.

informação relacionada