Pase comandos como entrada a otro comando (su, ssh, sh, etc.)

Tengo un script donde necesito iniciar un comando, luego pasar algunos comandos adicionalescomo comandos a ese comando. Lo intenté

su
echo I should be root now:
who am I
exit
echo done.

... pero no funciona: elsu tiene éxito, pero luego el símbolo del sistema solo me está mirando. Si escriboexit en el indicador, elecho ywho am i ¡etc. comience a ejecutar! Y elecho done. no se ejecuta en absoluto.

Del mismo modo, necesito que esto funcionessh:

ssh remotehost
# this should run under my account on remotehost
su
## this should run as root on remotehost
whoami
exit
## back
exit
# back

¿Cómo puedo solucionar esto?

Estoy buscando respuestas que resuelvan esto de manera general, y que no sean específicas desu ossh en particular. La intención es que esta pregunta se convierta en uncanónico para este patrón particular

Respuestas a la pregunta(3)

Su respuesta a la pregunta