Проблема в том, что перенаправление с <
выполняется локально, когда вы запускаете ssh самостоятельно (оболочкой, которую вы вводите в), но выполняется на удаленном компьютере при запуске из expect
, потому что spawn
просто копирует предоставленные вами аргументы, поэтому <
передается в удаленный как часть команды ssh. Это как если бы вы набрали 'ssh' 'xxxx @ yyyy' «sh -» '<' 'test.sh'
в оболочку, что аналогично не будет работать.
Вам нужно добавить промежуточную команду оболочки, чтобы перенаправление анализировалось до ssh. Используйте, например,
spawn sh -c "ssh xxxx@yyyy sh - < test.sh"