ControlPersist em combinação com ProxyCommand não é efetivo e você perdeu a opção ControlPath . Mas isso não é um problema aqui.
Primeiro de tudo, se você estiver usando um arquivo de configuração não-padrão e quiser que ele seja usado até mesmo pelo comando proxy, você precisa especificá-lo mesmo ali. A opção -q torna a conexão silenciosa, então você não tem idéia do que está acontecendo sob o capô do comando proxy. A opção LogLevel DEBUG3 é bastante útil.
Esta linha:
ProxyCommand ssh -W %h:%p -q [email protected]
precisa ser (e você não precisa do nome de usuário como já foi especificado acima):
ProxyCommand ssh -W %h:%p -F ssh.config x.x.x.x
Você também tem uma ordem errada de parâmetros no seu comando:
ssh 10.0.2.54 -F ssh.config -vv
precisa ser:
ssh -F ssh.config 10.0.2.54
como você pode ler na página de manual. E -vv não é necessário se você usar a opção LogLevel .
Então deve funcionar para você (pelo menos para mim, caso contrário, investigue o log).