Pesquisei alto e baixo para obter uma resposta para isso.
Eu tenho a configuração de chaves, portanto, nenhuma senha é necessária para o ssh no host remoto.
Eu tenho o sudo configurado com esse usuário para que eu possa executar os comandos necessários como root sem senha.
Eu só tenho usado o ssh para executar comandos remotos por alguns dias (que descoberta gloriosa!).
Um pouco de fundo:
O script que está sendo executado no host remoto é um típico script de início / parada de um programa. Em algum lugar no programa real, um arquivo de log é aberto para gravação.
No host remoto, tudo está bem se eu executar o script como root.
Se eu o executar como usuário, recebo um erro: log4cplus:ERROR Unable to open file: appname.log
. Faz sentido, já que o log é de propriedade do root.
Agora, a situação:
Eu tenho um script no meu host local que irá ssh para o host remoto e usando o sudo irá executar esse script. O script pode ser executado. No entanto, depois de iniciado, recebo o mesmo erro acima do arquivo de log.
Eu tentei o seguinte, que todos executam com sucesso o script, mas recebo o erro. Eu sei que alguns não são necessários, mas eu queria cobrir TODAS as bases que eu poderia encontrar (eu tentei com -t assim, mas nenhuma diferença. Eu não pensaria que haveria, mas ...):
/usr/bin/ssh username@remotehost sh -c sudo "/etc/rc3.d/S99script start"
/usr/bin/ssh username@remotehost sh -c sudo "/etc/rc3.d/S99script start"
/usr/bin/ssh username@remotehost 'sh -c sudo "/etc/rc3.d/S99script start"'
/usr/bin/ssh username@remotehost sudo /etc/rc3.d/S99script start
/usr/bin/ssh username@remotehost "sudo /etc/rc3.d/S99script start"
/usr/bin/ssh username@remotehost sudo "/etc/rc3.d/S99script start"
/usr/bin/ssh username@remotehost 'sudo "/etc/rc3.d/S99script start"'
/usr/bin/ssh username@remotehost sudo su - -c "/etc/rc3.d/S99script start"
/usr/bin/ssh username@remotehost 'sudo su - -c "/etc/rc3.d/S99script start"'
Eu sei que existem outras coisas que tentei, mas não documentei todas elas.
Não ria da minha tentativa de todas as citações diferentes, eu tenho uma compreensão decente de quando usar o que, em geral, mas eu não estava tomando nenhuma mudança em tentar coisas diferentes:)
Algo que notei ao executá-los, é se eu fizer um ps -ef | grep para o nome do script, ele mostra o seguinte:
[username's UID] 3070 3069 0 14:42 ? 00:00:00 bash -c /etc/rc3.d/S99script start
Isso é mesmo para os que eu faço "sh -c sudo".
O fato de ele estar rodando como bash -c é interessante, mas também interessante (eu pensei?) É que ele tem o UID do usuário em vez do nome de usuário listado.
** Adicionar: Eu também tentei criar um script no diretório pessoal do "username" que apenas faz:
%código%
E eu obtenho o mesmo resultado.