Você deve tentar depurar / solucionar problemas. Altere seu comando ssh atual para
ssh host 'cd someDir; echo "The password is $password"'
Você receberá
The password isAgora tente
echo host 'cd someDir; echo "The password is $password"'Você terá
host cd someDir; echo "The password is $password"
No seu comando ssh, você tem $password
entre aspas duplas,
e cercado por aspas simples em torno disso.
Bem, isso transforma as aspas duplas em caracteres simples e comuns
sem mais sintaticamente significativo do que se você tivesse digitado LDQ
e RDQ
-
então $password
é efetivamente agrupado em aspas simples.
Então $password
é enviado para o host remoto,
e não o valor de $password
(ou seja, a senha real).
Em seguida, o shell no host remoto tenta expandir $password
para um valor,
e não é nada, porque essa variável não foi definida nesse shell.
Um comando que pode funcionar é
ssh host 'cd someDir; echo "'"$password"'" | sudo -u nobody -S command'
Vamos examinar isso, adicionando espaços para ilustração / clareza:
… '…; echo "' "$password" '" | sudo …'
Isso ainda tem as aspas duplas entre aspas simples.
Mas, depois de especificar as aspas duplas literais (após echo
),
explora as aspas simples ,
Assim, a expansão / substituição variável pode ocorrer no comando local.
Então temos $password
entre aspas duplas.
Então voltamos para aspas simples para a segunda aspas duplas literais,
a barra vertical ( |
) e o comando sudo
.
Ressalva: atualmente não tenho acesso a um host no qual eu possa ssh então eu não testei completamente isso.