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,whoami
será executado e, finalmente,pwd
será executado. - O comando
sudo su - USER2
inicia 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 oexit
builtin) 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'