Mit diesem << EOF habe ich noch nicht gearbeitet. Meiner Erfahrung nach braucht telnet immer etwas Zeit. Es könnte sein, dass Deine Eingaben schon durch sind bevor telnet gestartet ist.
In der bash hatte ich immer Erfolg mit so etwas:
(sleep 1;echo root;sleep 1;echo rootpasswort;sleep 1;echo ls;sleep 1; echo df;sleep 1; echo exit )|telnet localhost |tee datei.log
Das habe ich jetzt nicht ausprobiert, sollte aber stimmen. Das ist primitiv, hat man sich aber schnell hingebastelt. Ein schönes Script kann man später immer noch machen.
Hier logged sich der Benutzer root mit dem Passwort rootpasswort ein und führt ein ls und df aus und logged sich mit exit aus. Die Kommandofolge kann mit einer while-read-Schleife aus einer Datei gelesen werden.