Para evitar isso, você deve citar o comando inteiro para evitar que ele seja dividido pelo seu shell local:
ssh root@REMOTEIP "ssh-keygen -t rsa -f /root/.ssh/id_rsa_new -q -N ''"
O problema é que ssh , com o objetivo de ser compatível com rsh (que inicialmente substituiu), envia a linha de comando inteira como um argumento único que é passado posteriormente para o shell remoto (no Unix, $SHELL -c "your command" ).
-
Quando você corre
ssh root@REMOTEIP ssh-keygen -t rsa -f /root/.ssh/id_rsa_new -q -N "" -
o shell local é executado
["ssh", "root@REMOTEIP", "ssh-keygen", "-t", "rsa", "-f", "/root/.ssh/id_rsa_new", "-q", "-N", ""] -
qual
sshconcatena juntos para obter"ssh-keygen -t rsa -f /root/.ssh/id_rsa_new -q -N " -
e o shell remoto se divide novamente em
["ssh-keygen", "-t", "rsa", "-f", "/root/.ssh/id_rsa_new", "-q", "-N"]- observe os argumentos vazios ausentes.