Não é possível enviar a senha através do comando ssh, erro de senha incorreto

1

Eu tenho um script que faz várias coisas e, dentre essas coisas, ele solicita uma senha ao usuário, armazena-a no parâmetro $password e executa este comando:

ssh [host] 'cd someDir; echo "$password" | sudo -u nobody -S <command>'

O problema é que recebo o erro Sorry, try again e, em seguida, a conexão é eliminada.

Como posso executar um comando sudo usando o ssh? Ele funciona se eu me conectar primeiro ao host remoto e, em seguida, executar echo 'password_string' | sudo -u nobody -S <command>

    
por Alexandru Antochi 04.08.2017 / 16:24

1 resposta

2

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 is 
Agora 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.

    
por 04.08.2017 / 17:13