Como executar o comando ssh de forma remota um comando sudo sem senha

1

Não sei exatamente qual é o título dessa pergunta, mas deixe-me explicar.

Situação: Eu tenho um servidor linux (baseado no debian) que é configurado para permitir a sessão SSH para o usuário 'admin', mas não o usuário 'root'. Ambas as contas estão ligadas de alguma forma porque compartilham a mesma senha.

Durante uma sessão SSH como admin, 'sudo' é necessário para executar comandos, a menos que eu mude para o usuário 'root'.

Eu tenho alguns serviços em que preciso executar agora e depois, ou até mesmo na inicialização do sistema. Atualmente estou usando o mecanismo de chave privada / pública para executar comandos remotamente no servidor. Alguns dos comandos são digitados manualmente, outros são scripts de shell que eu executo. Atualmente, o servidor ainda pede senha quando um comando usa sudo.

Pergunta: Como pode a execução remota como usuário 'admin' sem fornecer a senha? É possível usar uma chave privada / pública para satisfazer o sudo? Ou talvez até mesmo uma maneira de iniciar scripts de shell como o usuário 'root'?

É possível evitar digitar a senha usando o sudo? Se não, são outras alternativas para situações como a minha?

    
por izack 03.10.2017 / 10:06

4 respostas

8

você pode dizer ao sudo para pular a senha para algum comando.

por exemplo. em /etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

isso me permite usar

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

como archemar sem senha.

Note que

sudo -u www-data rm -rf /var/www/log/upload.*

não funcionará (solicitará uma senha), pois rm difere de /bin/rm .

Certifique-se de editar o comando /etc/sudoers usando visudo .

Quando você alcançar o nível avançado, talvez deseje ter seus próprios arquivos sudo em /etc/sudoers.d .

    
por 03.10.2017 / 10:31
1

A maneira mais simples é fornecer a senha de stdin se o seu sudo suportar isso (tecla -S)

ssh -t admin@remotehost "echo <yourpassword> |sudo -S <yourcommand>"
    
por 03.10.2017 / 10:26
0

Para adicionar a resposta do Archemar, sudo pede a senha do usuário executando sudo , não o usuário em que o comando será executado. Você diz que as contas "admin" e "root" estão "vinculadas" e compartilham a mesma senha. Se você chegou a essa conclusão com base em sudo aceitando a senha da conta 'admin' (e a senha sudo aceita alteração quando a senha de 'admin' é alterada), esse é o comportamento normal de sudo .

    
por 08.10.2017 / 10:07
0

Se as contas estão ligadas de alguma forma, não faz sentido permitir ssh para um e não para o outro. Aqui está o que eu faria em vez disso:

  • habilitar ssh para root, permitindo somente acesso com chaves ssh e não com senha
  • crie uma nova chave que será usada apenas para seu comando específico
  • insira a chave e o comando que você precisa executar em authorized_keys da raiz, para que, assim que uma conexão for estabelecida com essa chave, o comando seja iniciado.

Isso é seguro porque dessa maneira o chamador não pode ter um shell nem executar qualquer outro comando (mesmo que ele forneça um).

Você pode ver um exemplo aqui: link com a sintaxe command= . Você também pode fazer a mesma coisa incorporando o comando no certificado se usar certificados em vez de chaves ou fazer isso globalmente usando a opção de configuração ForceCommand

Veja link para outro exemplo (que ilustra que você precisa levar em conta os parâmetros do seu comando)

    
por 08.10.2017 / 03:11