como executar remotamente um script de shell com privilégios elevados

1

Eu tenho dois servidores, serverA e serverB .

Atualmente eu executo um script de shell em serverA que cria um arquivo e 'envia' para serverB . O shell script é executado como cron a cada hora e requer SUDO privileges.

No entanto, devido a alterações em nossa configuração, não posso mais 'empurrar' o arquivo de serverA para serverB e, em vez disso, agora precisa 'puxar' o arquivo de serverB para serverA .

Existe uma maneira 'correta' de se conectar a um servidor remoto e executar um script que requer privilégios elevados? mas sem ter que anotar a senha no shell script em serverB ?

    
por IGGt 27.10.2015 / 17:38

2 respostas

2

Você tem algumas escolhas. Aqui estão algumas sugestões:

  1. Conecte-se do servidorB à raiz @ servidorA usando a autenticação baseada em certificado e execute o script no contexto raiz desse servidor.

    Você pode usar a mesma autenticação baseada em certificado para recuperar o arquivo resultante com scp ou rsync . A desvantagem é que sua conta no serverB, em seguida, tem acesso total não-mitigado ao root @ serverA. no entanto, em um ambiente bem gerenciado, isso pode ser aceitável.

  2. Conecte-se do servidorB à raiz @ servidorA usando a autenticação baseada em certificado que limita a conexão à execução de um único comando - seu script.

    Se o comando tiver que enviar seu arquivo para stdout , ele poderá ser capturado diretamente da sessão ssh de serverB para root @ serverA sem a necessidade de transferir o arquivo após a conclusão do script. Sua conta no servidorB não teria acesso arbitrário ao root @ serverA.

    Um exemplo da entrada necessária para root @ serverA em seu arquivo ~root/.ssh/authorized_keys para executar o comando bake pode ser um pouco parecido com isto:

    ssh-rsa AAAAB3Nza...Fr9FvN me@roaima,command="/usr/local/bin/bake",no-agent-forwarding,no-port-forwarding,no-X11-forwarding
    
  3. Conecte-se do serverB ao serverA e use sudo para executar o script. Você pode configurar sudo para permitir que sua conta de usuário única execute o script como root, mas sem exigir uma senha.

    Esta entrada em /etc/sudoers permitiria ao usuário "roaima" executar o script nomeado com ou sem argumentos como root usando um comando como sudo /usr/local/bin/bake --fruit=apple,blackberry --type=pie

    roaima ALL = NOPASSWD: /usr/local/bin/bake
    
  4. Coisas mais complicadas com triggers, como conectar-se a uma porta TCP definida no serverA e ativar o script, como root.

    Isso significa que qualquer pessoa que possa acessar essa porta TCP no servidorA pode iniciar seu script, portanto, é necessário considerar problemas de DDOS e impedir que várias instâncias do script sejam executadas simultaneamente. No entanto, isso eliminaria a necessidade de ter qualquer acesso root interativo no serverA - mesmo que mediado com sudo .

por 27.10.2015 / 18:15
1

Você pode se conectar ao serverB via ssh , depois executar sudo para executar seu script com privilégios elevados. Você pode configurar sudo para não pedir uma senha.

    
por 27.10.2015 / 17:43