Passe comandos como entrada para outro comando (su, ssh, sh, etc)

Eu tenho um script em que preciso iniciar um comando e depois passar alguns comandos adicionaiscomo comandos para esse comando. eu tentei

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

... mas não funciona: osu consegue, mas o prompt de comando está me encarando. Se eu digitarexit no prompt, oecho ewho am i etc comece a executar! E aecho done. não é executado.

Da mesma forma, eu preciso que isso funcionessh:

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

Como eu resolvo isso?

Estou procurando respostas que resolvam isso de uma maneira geral e que não são específicas parasu oussh em particular. A intenção é que essa questão se torne umcanônico para esse padrão em particular.

questionAnswers(3)

yourAnswerToTheQuestion