Esta resposta assume que o sshd está configurado para permitir o encaminhamento de porta em HOST_1 e HOST_2.
Você já encontrou a maior parte do que precisa (a segunda opção da resposta de Mika Fischer em seu primeiro link).
Tunnel from localhost to host1 and from host1 to host2:
ssh -L 9999:localhost:9999 host1 ssh -L 9999:localhost:1234 -N host2
This will open a tunnel from localhost to host1 and another tunnel from host1 to host2. However the port 9999 to host2:1234 can be used by anyone on host1. This may or may not be a problem.
A idéia é agrupar o encaminhamento de porta (ou seja, você está encaminhando uma porta local para uma porta remota que, em seguida, encaminhará para uma porta ainda mais remota).
Para o seu exemplo, o comando seria
ssh -tt -L 3306:localhost:XXXX [user@]HOST_1 ssh -L XXXX:MYSQL_HOST:3306 [user@]HOST_2
em que XXXX é qualquer porta acima de 1024 que ainda não esteja em uso (use o mesmo número para substituir as duas instâncias)
Uma vez executado, você será perguntado pela senha duas vezes (uma vez para HOST_1 e uma vez para HOST_2), a menos que você esteja usando chaves SSH para login sem senha. O túnel funcionará enquanto você permanecer conectado ao HOST_2 via HOST_1.
Aqui está o detalhamento:
ssh
é o cliente ssh local que você está executando
-tt
força a alocação de pseudo-tty (consulte O pseudo-terminal não será alocado porque o stdin não é um terminal para explicar por que isso pode ser necessário)
-L 3306:localhost:XXXX [user@]HOST_1
está dizendo ao seu cliente ssh local para encaminhar 3306 em seu sistema local para a porta XXXX em "localhost" no outro lado da conexão SSH. Você só precisa especificar user@
se o usuário em seu computador local for diferente do usuário ao qual você está se conectando no HOST_1. Mais genericamente, você poderia especificar uma porta local diferente de 3306, mas você apontaria seu cliente mysql para 127.0.0.1:[ sua porta escolhida].
ssh
(o segundo) Como você deve saber, o ssh tem a opção de executar um único comando em vez de lançar um shell. Você usará isso para executar outra sessão SSH no HOST_1, que criará o próximo link na cadeia de encaminhamento de porta.
-L XXXX:MYSQL_HOST:3306 [user@]HOST_2
Como essa sessão ssh está sendo executada no HOST_1, ela está encaminhando XXXX no lado local (HOST_1) (que está sendo encaminhado para o 3306 no cliente) para a porta 3306 no MYSQL_HOST no lado remoto (HOST_2). Você só precisa especificar user@
se o usuário no HOST_1 for diferente do usuário ao qual você está se conectando no HOST_2.
Se forem necessários saltos adicionais, adicione instâncias de ssh -L XXXX:localhost:XXXX hostX
para cada salto no meio, contanto que XXXX seja uma porta disponível em todos os servidores no caminho.