Você pode usar a porta ssh para arquivar isso
ssh -L localportinmypc:hostname_of_the_behind_the_firewall:remoteport hostname_of_my_firewall
Agora depois disso:
sftp -o Port=localportinmyp localhost or ssh -p localportinmyp
Eu tenho duas máquinas acessíveis na Internet sem nenhum NAT envolvido. Ambas as máquinas executam um serviço SSH.
Eu quero conectar via SSH / SFTP ao servidor A na porta 2000 e essa conexão deve ser roteada para a porta 22 do servidor B (comportamento como um proxy reverso HTTP, mas usando SSH / SFTP em vez de HTTP)
Isso não deve ser problema para o iptables:
#!/bin/bash
export IP="1.2.3.4"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables \-t nat \-A POSTROUTING \-o eth0 \-d $IP \-j MASQUERADE
iptables \-A PREROUTING \-t nat \-p tcp \--dport 2000 \-j DNAT \--to $IP:22
Algo como:
ssh -o ProxyCommand="ssh -e none userA@serverA:2000 nc -w 1 serverB 22" userB@ServerB
onde você se conecta a serverA com ssh login userA para abrir uma conexão encaminhar para serverB para que você faça o login com userB .
Explicação:
O comando proxy abre uma conexão ssh para ServerA (com nome de usuário userA ) e inicia uma conexão bidirecional para a porta 22 de serverB . / p>
O comando ssh
inicial usa este ProxyCommand
para estabelecer uma conexão bidirecional para ServerB , onde você precisa efetuar o login com userB .
Em multa:
Existe uma conexão criptografada de Laptop para ServerA (passo 1 do seu desenho) e
outra conexão criptografada de Laptop para ServerB (etapa 1 + etapa 2), encapsulada na primeira conexão em sua primeira parte (etapa 1), do que vinculada por nc
na segunda parte (etapa2).
Em vez de HTTP, Como SSH
é bidirecional, quando uma conexão é aberta, todas as solicitações e respostas seguem a mesma conexão. Portanto, não há necessidade de pensar nos seus passos 3 e 4.