Para poder acessar a Máquina A (atrás do firewall) da Máquina C através da Máquina B intermediária (firewall externo), faça o seguinte:
Na máquina A:
ssh -2 -N -l [acct on B] -g -R 4001:localhost:22 MachineB
'- g' pode ou não ser requerido. É isso que eu uso. Você pode escolher qualquer porta além de '4001'.
Em seguida, na Máquina B:
ssh -p4001 -g -L 9999:machineA:22 localhost
Note que 'machineA' também pode ser '127.0.0.1'. Não tem 100% de certeza - experimente.
'-g' também disponibiliza a porta 9999 para outras máquinas externas à Máquina B.
Omitir '-g' disponibiliza a porta 9999 apenas para outros processos na Máquina B.
Em seguida, na Máquina C:
ssh -p9999 me@MachineB
Voila!
Você também pode acessar outra máquina, D, na rede de A a partir de C. Faça isso no MachineB:
ssh -p4001 -g -L 9999:[some machine on MachineA's network]:[some port] localhost
Isso permite que você acesse uma porta em outra máquina na rede do MachineA.
Portanto, se houver uma máquina D, também atrás do firewall na mesma rede que fica ao lado da Máquina A, você poderá acessá-la da Máquina C como se estivesse na Máquina A.
Por exemplo, se a Máquina D for uma caixa do Windows Server e você quiser usar a Área de Trabalho Remota da Máquina C, que também é uma Caixa do Windows, para a Máquina D, faça o seguinte:
Máquina A:
ssh -2 -N -l [acct on B] -g -R 4001:localhost:22 MachineB
(isso é o mesmo)
Máquina B:
ssh -p4001 -g -L 9999:machineD:3389 localhost
Máquina C: ative o cliente RDP e conecte-se a MachineB:9999
BAM! Você está conectado à Caixa do Windows Server (Máquina D) da Máquina C.