O problema é que o redirecionamento com <
está sendo feito localmente quando você executa o ssh sozinho (pelo shell no qual está digitando), mas está sendo executado na máquina remota quando executa a partir de expect
, porque spawn
simplesmente copia os argumentos fornecidos, portanto, o <
é passado para o remoto como parte do comando ssh. É como se você digitasse 'ssh' 'xxxx@yyyy' "sh -" '<' 'test.sh'
no shell, o que da mesma forma não funcionará.
Você precisa adicionar um comando shell intermediário para obter o redirecionamento analisado antes do ssh. Use por exemplo,
spawn sh -c "ssh xxxx@yyyy sh - < test.sh"