Se eu entendi corretamente, você deseja enviar dados de A para C, mas nenhum computador pode se conectar ao outro, mas eles podem se conectar a B. B não pode se conectar a ninguém.
Uma solução está usando o encaminhamento de porta. C pode encaminhar de uma porta em B para sua porta SSH (porta 22):
ssh -R 1088:localhost:22
1088 é arbitrário, escolha uma porta que ainda não esteja em uso. Por padrão, essa porta está disponível apenas nessa máquina local, ou seja, somente os processos em execução em B podem se conectar a ela.
agora um usuário em A pode se conectar diretamente a C:
ssh B "ssh -p 1088 localhost"
Ou, por exemplo, este comando enviará um arquivo de A para C:
cat infile | ssh B "ssh -p 1088 localhost \"cat > outfile\""
Como alternativa, A pode ter encaminhar sua porta, permitindo que o usuário em C inicie a cópia.
Outra solução é usar pipes nomeados. Em B, execute:
mkfifo named_pipe
Em seguida, você pode enviar dados para o pipe com:
cat infile | ssh B "cat > named_pipe"
Este comando irá travar até que alguém abra a outra extremidade do tubo e leia os dados dele. Por exemplo, o usuário em C pode fazer:
ssh B "cat named_pipe" > outfile
Isso enviará o arquivo de A a B para C.