The best ways to automate this type of input, is using
expect or better
most servers come with python, at least with a modern distribution.
First off you said your VM does not have
expect installed? I'm not sure why that matters. Is there any reason why you cannot install/execute something, under your local account?
Next consideration, why must you even use
passwd??? You can also change a password by replacing the hash specified in
/etc/shadow. You obviously would need to correctly pregenerate a hash first, but as long as you use a supported one it should work as expected. Now how you would script such an action, that's an exercise for you to work out.
I also want to mention,
passwd does not read it's input from STDIN. If i'm not mistaken, it reads from a tty. So no fancy combo of just
sleep would work. However it's possible using a HEREDOC, but assumes system is sufficiently responsive. You may be able to break it up and
sleep between entires. I just tested this, it worked on my Ubuntu workstation.
passwd root <<'EOF'