Você está executando o comando sudo su - USER2; whoami; pwd no host remoto. Vamos decompor isso:
- Os comandos separados por um ponto-e-vírgula são executados em sequência. Assim, o comando
sudo su - USER2é executado primeiro; em seguida, quando terminar,whoamiserá executado e, finalmente,pwdserá executado. - O comando
sudo su - USER2inicia um shell de login como usuário USER2. Este shell lê os comandos da entrada padrão até que seja solicitado a sair (por exemplo, com oexitbuiltin) ou até detectar um fim de arquivo na entrada padrão. Como a entrada padrão está conectada ao terminal, ele espera que você digite comandos.
Se você quer executar comandos como USER2, você precisa passá-los como argumentos para sudo . Executar su não é útil aqui, o sudo já sabe como fazer isso. Você não precisa da opção -t para SSH, a menos que queira interagir com os comandos remotos (isso inclui o caso em que você precisa digitar uma senha para o sudo).
ssh -t "$remotehost" 'sudo -i -u USER2 sh -c "whoami; pwd"'
Se a configuração do sudo permitir que você execute programas como root, e não como um usuário arbitrário (o que não altera nada em termos de segurança), você precisará manter o sudo su . Nesse caso, passe a opção -c para su para executar o comando shell especificado.
ssh -t "$remotehost" 'sudo su -c "whoami; pwd" USER2'
Se você precisar ler o .profile do usuário, faça isso explicitamente.
ssh -t "$remotehost" 'sudo su -c ". ~/.profile; whoami; pwd" USER2'
Como alternativa, você pode passar os comandos como entrada padrão para um shell interativo. O encanamento é um pouco delicado, já que a entrada padrão do ssh deve permanecer no terminal. Uma vantagem dessa abordagem com um documento aqui é que a cotação no comando shell permanece relativamente simples: escape ' as '\'' para o shell remoto, nenhum escape é necessário para o shell remoto.
ssh -t "$remotehost" 'sudo su - USER2 <<\EOF
whoami
pwd
EOF'