ProxyCommand não funciona da maneira que você pensa. O comando especificado não é executado na máquina do gateway. Em vez disso, ele é executado na máquina de conexão.
O fluxo de execução é, portanto:
-
O ProxyCommand "ssh gateway -W% h:% p" é executado na máquina "local". Isso estabelece uma sessão SSH com o gateway, usando a identidade RSA na sua caixa local. O sinalizador -W especifica que stdin e stdout devem ser conectados a uma origem de sessão TCP no gateway para seu destino final.
-
Com a sessão de proxy estabelecida, o ssh em sua caixa local novamente usa essa sessão para autenticar seu servidor SSH remoto, novamente, usando credenciais locais.
É um pouco confuso, mas pense no ProxyCommand simplesmente configurando um "canal" entre o seu cliente SSH local e o servidor SSH que é o seu destino final. Esse pipe mudo é então usado pelo seu cliente SSH local para falar com o serviço SSH do destino final.
A chave é que existem, portanto, duas instâncias de SSH em execução na sua caixa local, sendo uma delas o ProxyCommand, a outra conexão SSH real que você deseja estabelecer! Você deve ser capaz de verificar isso, olhando para a saída de "ps aux" na sua caixa local.
Isso explicaria por que ele está tentando usar o material de chave em sua caixa local, em vez de em seu gateway para autenticar. : -)
O motivo pelo qual o rsync funciona é que você está realmente fazendo "ssh gateway ssh" como seu comando --rsh, que na verdade executa o ssh uma vez na caixa local para se conectar ao gateway, e então novamente na caixa remota , que então usará o material da chave remota.
Espero que isso ajude.