A maneira que eu faço isso no meu ambiente atual, é rodar o ssh com o -t
flag que força a alocação do tty, e então rodar o sudo -u root dentro dele, como segue:
ssh -t hostname << EOF
command1
sudo -u root command2
sudo -u otheruser "command3 | command4"
sudo -u root /bin/bash -c "command5; command6; command7"
command8 && ( sudo -u otheruser /bin/bash -c "cmd1 ${1}; cmd2 {$2}" ) || echo cmd2 did not work
EOF
Eu tenho minha conta em sudoers no lado remoto para que nenhuma senha seja necessária.
Este exemplo mostra diferentes maneiras de fazer isso em uma única sessão ssh, incluindo a execução de vários comandos com bash ou dentro de uma subshell. Note também que se você colocar o código acima em um script executável, você pode passar argumentos de linha de comando ($ 1 e $ 2) para ssh e estes serão expandidos e então referenciados no lado remoto.