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
ssh
concatena 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.