-L (local) escuta no host local, onde você executa o ssh. (é o que você precisa)
-R (remoto) escuta no host remoto, no host ao qual você se conecta pelo ssh. é usado para conexão reversa.
1.1 . Você precisa conectar ssh de C a B e mapeie a porta local (3306 ou qualquer não padrão) para B: 3306
ssh -L 3306:A:3306 b-user@B-server
1.2 então conecte o cliente Mysql ao localhost: 3306
Neste cenário, conexão Mysql B - > C não criptografado por ssh.
2.1 . Conecte o ssh de C a A usando B como host bastion. e mapeie a porta local para a porta local em A.
ssh -o ProxyCommand='ssh b-user@B-server nc A-server 22' -L 3306:localhost:3306 ssh a-user@A-server
Ou se o OpenSSH for novo o suficiente
ssh -o ProxyCommand='ssh b-user@B-server -W A-server:22' -L 3306:localhost:3306 ssh a-user@A-server
2.2 então conecte o cliente Mysql ao localhost: 3306
3.1 Se você não precisar de criptografia para o mysql e precisar de desempenho máximo
ssh b-user@B-host ncat --sh-exec "ncat A-server 3306" -l 3306 --keep-open
3.2 então conecte o cliente Mysql ao servidor B: 3306
4.1 Use dois ssh tunnel em sequência (o que o Sim Sca tenta fazer como eu entendo)
ssh -L 3306:localhost:3337 b-user@B-server ssh -N -L 3337:localhost:3306 a-user@A-server
- conecte de C a B e mapeie local (C) 3306 para B: 3337
- conecte de B a A e mapeie o local (B) 3337 para A: 3306
4.2 então conecte o cliente Mysql ao localhost: 3306
Eu não gosto desse jeito, porque preciso escolher porta (3337) em B.
UPD para a pergunta upd:
Por padrão, ssh escuta apenas localmente.
Quando você mapeia o controle remoto B: 3306 para localhost: 3337, use:
ssh -R 0.0.0.0:3306:localhost:3337 b-user@B-server
para ouvir em todos os IPs
Se a criptografia ssh não for necessária para o caso de conexão do mysql, 3 poderá obter um melhor desempenho.