Eu escrevi um pequeno script bash que recebe dois parâmetros: endereço IP de DESTINO e SENHA, e então chama comandos como:
sshpass -p "$PASSWORD" ssh -p 2022 "username@$DESTINATION" -t -o StrictHostKeychecking=no -o RemoteCommand="systemctl stop watchdog"
Mas ainda me pedem a senha novamente porque systemctl
requer acesso sudo. Por que sshpass
isso não está sendo resolvido?
sshpass
O comando não controlasudo
o acesso. Ele lida apenas com assh
conexão inicial quando uma senha é necessária para fornecê-la em um shell não interativo. Deman sshpass
:systemctl stop watchdog
requer que o "nome de usuário" execute uma escalada de privilégios (acesso de administrador).Para o que você precisa, você deve usar:
Mas você precisa ter certeza de que "nome de usuário" tem
sudo
permissão na$DESTINATION
máquina remota. Você pode verificar com:e então adicione dentro do arquivo:
1 Observe que você pode usar a autenticação de certificado com um agente ssh para evitar o uso,
sshpass
o que pode levar a problemas de segurança.Com base na resposta de @user2747390, tentei adicionar outro
sshpass
para a máquina de destino (tive que instalá-lo primeiro):Isso falhou porque acontece que a senha tem um
%F
(mesmo que a senha esteja entre aspas) e o comando tentou analisar isso, então eu obtive:Acabei consertando isso removendo
-o RemoteCommand=
(não lembro por que usei isso em primeiro lugar):